poj 1511 Invitation Cards spfa 基础题!!虽然我做的比较坎坷!!可以练手啊!!
2011-11-26 11:13
302 查看
这道题整的我真是纠结,inf定义为0x7FFFFFF就是wa,改成7个F就过了,尼玛啊!!if(w+d[t]<d[temp])难道这样一加不超范围了吗!!求解释
这道题spfa 正反两次就行了
#include<iostream> using namespace std; #include<queue> #include<algorithm> #include<memory.h> #define N 1000005 #define inf 0x7FFFFFFF struct node { int u; int c; int next; }e ,o ; int a ,b ,c ,p ; long long d ; bool vis ; int te=0; void add(int a,int b,int c) { e[te].u=a; e[te].c=c; e[te].next=p[b]; p[b]=te; te++; } int spfa(int s) { d[s]=0; vis[s]=true; queue<int>q; q.push(s); while(!q.empty()) { int t=q.front(); q.pop(); vis[t]=false; for(int j=p[t];j!=-1;j=e[j].next) { int w=e[j].c; int temp=e[j].u; if(w+d[t]<d[temp]) { d[temp]=w+d[t]; if(!vis[temp]) { vis[temp]=true; q.push(temp); } } } } } int main() { int n,q; int sum; while(cin>>n) { while(n--) { scanf("%d%d",&sum,&q); for(int i=0;i<N;i++) { p[i]=-1; } memset(vis,0,sizeof(vis)); fill(d,d+N,inf); te=0; for(int i=1;i<=q;i++) { scanf("%d%d%d",&a[i],&b[i],&c[i]); add(a[i],b[i],c[i]); } spfa(1); long long sum1=0; for(int i=1;i<=sum;i++) sum1+=d[i]; memset(vis,0,sizeof(vis)); for(int i=0;i<N;i++) d[i]=inf; for(int i=0;i<N;i++) { p[i]=-1; } te=0; for(int i=1;i<=q;i++) { add(b[i],a[i],c[i]); } spfa(1) ; long long sum2=0; for(int i=1;i<=sum;i++) sum2+=d[i]; cout<<sum1+sum2<<endl; } } return 0; }
相关文章推荐
- poj 1511 Invitation Cards spfa比基础题难一些!!练练手挺好
- POJ图论列表,想学图论的可以做下,打*的是经典题,蛮多都比较难,基础知识多看几次再做
- POJ图论列表,想学图论的可以做下,打*的是经典题,蛮多都比较难,基础知识多看几次再做
- 基础最短路 十 POJ 1511
- 关于java的一些问题,比较基础,大家可以看看咯
- 例题:计算运费。c#语言基础,比较简单。看代码输入格式和方法。同样方法可以做一个 出租车打车的程序
- 串口通信(MSComm)开发过程记录(包含一个可以通信的比较基础的程序版本)
- POJ推荐50题 1. 标记“难”和“稍难”的题目可以看看,思考一下,不做要求,当然有能力的同学可以直接切掉。 2. 标记为 A and B 的题目是比较相似的题目,建议大家两个一起做,可以对比总结,
- POJ 1577 BST的基础题 GCC可以AC
- 第二章:持续更新中(我突然发现可以截图pdf再复制到文档中。虽然比较麻烦,但比较好阅读.)
- POJ - 1511
- poj 百练 2742(基础题)
- POJ 1543 完美立方——基础枚举
- poj 1511 正反向建图
- poj 1511 Invitation Cards(SPFA)(矩阵以及邻接表对比)
- 【基础备忘】JSON与XML的区别比较
- poj 2096——基础期望dp
- poj 1511
- poj 3264 Balanced Lineup(基础线段树)
- POJ 1511 Invitation Cards(SPFA)