JZYZOJ1525 HAOI2012道路 堆优化的dijkstra+pair
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<queue>
using namespace std;
#define pa pair<int,int>
const int mymod=;
const int bign=;
int n,m;
struct wtff{
int y;
int next;
int zhi;
}wtf[];
int head[]={};
int tail=;
long long ans[]={};
long long a[]={};
long long b[]={};
int c[]={};
long long dis[]={};
bool vis[]={};
void init(int x,int y,int zhi){
wtf[++tail].next=head[x];
wtf[tail].zhi=zhi;
wtf[tail].y=y;
head[x]=tail;
}
void jiuming(int st){
priority_queue< pa,vector<pa>,greater<pa> >q;
memset(vis,,sizeof(vis));
for(int i=;i<=n;i++){
dis[i]=bign;
}
dis[st]=;
q.push(make_pair(,st));
int cn=;
while(!q.empty()){
int x=q.top().second;
q.pop();
if(vis[x]){
continue;
}
vis[x]=;
c[++cn]=x;
for(int i=head[x];i!=;i=wtf[i].next){
int y;
y=wtf[i].y;
if(dis[x]+wtf[i].zhi<dis[y]){
dis[y]=dis[x]+wtf[i].zhi;
q.push(make_pair(dis[y],y));
}
}
}
memset(a,,sizeof(a));
memset(b,,sizeof(b));
a[st]=;
for(int i=;i<=cn;i++){
b[c[i]]=;
}
for(int i=;i<=cn;i++){
for(int w=head[c[i]];w!=;w=wtf[w].next){
int y=wtf[w].y;
if(dis[c[i]]+wtf[w].zhi==dis[y]){
a[y]+=a[c[i]];
if(a[y]>mymod){
a[y]%=mymod;
}
}
}
}
for(int i=cn;i>=;i--){
for(int w=head[c[i]];w!=;w=wtf[w].next){
int y=wtf[w].y;
if(dis[c[i]]+wtf[w].zhi==dis[y]){
b[c[i]]+=b[y];
if(b[c[i]]>mymod){
b[c[i]]%=mymod;
}
}
}
}
for(int i=;i<=n;i++){
for(int w=head[i];w!=;w=wtf[w].next){
int y=wtf[w].y;
if(dis[i]+wtf[w].zhi==dis[y]){
ans[w]+=(a[i]*b[y]);
if(ans[w]>mymod){
ans[w]%=mymod;
}
}
}
}
}
int main(){
cin>>n>>m;
for(int i=;i<=m;i++){
int a1,b1,c1;
cin>>a1>>b1>>c1;
init(a1,b1,c1);
}
for(int i=;i<=n;i++){
jiuming(i);
}
for(int i=;i<=m;i++){
cout<<ans[i]<<endl;
}
return ;
}
JZYZOJ1525 HAOI2012道路 堆优化的dijkstra+pair的更多相关文章
- 堆优化的Dijkstra
SPFA在求最短路时不是万能的.在稠密图时用堆优化的dijkstra更加高效: typedef pair<int,int> pii; priority_queue<pii, vect ...
- POJ1797 Heavy Transportation (堆优化的Dijkstra变形)
Background Hugo Heavy is happy. After the breakdown of the Cargolifter project he can now expand bus ...
- 朴素版和堆优化版dijkstra和朴素版prim算法比较
1.dijkstra 时间复杂度:O(n^2) n次迭代,每次找到距离集合S最短的点 每次迭代要用找到的点t来更新其他点到S的最短距离. #include<iostream> #inclu ...
- 学习笔记·堆优化$\mathscr{dijkstra}$
嘤嘤嘤今天被迫学了这个算法--其实对于学习图论来说我内心是拒绝的\(\mathscr{qnq}\) 由于发现关于这个\(\mathscr{SPFA}\)的时间复杂度\(O(kE)\)中的\(k \ap ...
- 堆优化的dijkstra算法
#include<bits/stdc++.h> using namespace std; #define ll long long #define P pair<int,int> ...
- 【模板】堆优化的dijkstra
生命算法,以防忘记 #include<bits/stdc++.h> using namespace std; int head[200005],dis[200005],n,m,s,f,g, ...
- 洛谷 P1462 通往奥格瑞玛的道路(二分答案,堆优化dijkstra)
传送门 解题思路 首先看题目问题,求经过的所有城市中最多的一次收取的费用的最小值是多少.一看“最大值最小”就想到了二分答案. 在读一遍题目,就是二分收取的费用,然后对于每一个二分的费用,跑一边最短路, ...
- POJ-2387.Til the Cows Come Home.(五种方法:Dijkstra + Dijkstra堆优化 + Bellman-Ford + SPFA + Floyd-Warshall)
昨天刚学习完最短路的算法,今天开始练题发现我是真的菜呀,居然能忘记邻接表是怎么写的,真的是菜的真实...... 为了弥补自己的菜,我决定这道题我就要用五种办法写出,并在Dijkstra算法堆优化中另外 ...
- 【51nod1443】路径和树(堆优化dijkstra乱搞)
点此看题面 大致题意:给你一个无向联通图,要求你求出这张图中从u开始的权值和最小的最短路径树的权值之和. 什么是最短路径树? 从\(u\)开始到任意点的最短路径与在原图中相比不变. 题解 既然要求最短 ...
随机推荐
- NYOJ 202 红黑树 (二叉树)
题目链接 描述 什么是红黑树呢?顾名思义,跟枣树类似,红黑树是一种叶子是黑色果子是红色的树... 当然,这个是我说的... <算法导论>上可不是这么说的: 如果一个二叉查找树满足下面的红黑 ...
- 美团实习Java岗面经,已拿offer
作者:icysnowgx 链接:https://www.nowcoder.com/discuss/71954?type=2&order=3&pos=10&page=1 来源:牛 ...
- Vuex-Mutation
更改 Vuex 的 store 中的状态的唯一方法是提交 mutation.Vuex 中的 mutation 非常类似于事件:每个 mutation 都有一个字符串的 事件类型 (type) 和 一个 ...
- 分布式系统的负载均衡以及ngnix负载均衡的五种策略
一般而言,有以下几种常见的负载均衡策略: 一.轮询. 特点:给每个请求标记一个序号,然后将请求依次派发到服务器节点中,适用于集群中各个节点提供服务能力等同且无状态的场景. 缺点:该策略将节点视为等同, ...
- What I Learned as a Junior Developer Writing Tests for Legacy Code(转载)
I go to the gym and lift weights because I like the feeling of getting stronger and better. Two mont ...
- Netty并发优化之ExecutionHandler
上文<Netty框架入门>说到:如果业务处理handler耗时长,将严重影响可支持的并发数. 针对这一问题,经过学习,发现了可以使用ExecutionHandler来优化. 先来回顾一下没 ...
- 处理tomcat内存溢出问题
TOMCAT起步内存溢出问题Exception in thread ""http-bio-8080"-exec-java.lang.OutOfMemoryError: P ...
- [ python ] 进程的操作
目录 (见右侧目录栏导航)- 1. 前言- 2. multiprocess模块- 2.1 multiprocess.Process模块 - 2.2 使用Process模块创建进程 - 2. ...
- Linux打补丁的一些问题
linuxpatchlinux内核文档commandheader类unix操作系统有一个很有趣的特性就是源代码级的补丁包.在windows上我们打补丁都是运行一个可执行的程序,然后就可以把补丁打完了, ...
- Char 与 Byte
var c: Char; b: Byte; begin c := 'A'; ShowMessage(c); //A b := ; ShowMessage(IntToStr(b)); c := Chr( ...