关于SPFA,记一点小悲催 poj 3159
来源:互联网 发布:安全知培训培训资料 编辑:程序博客网 时间:2024/06/03 17:41
一个作死的WA的代码
/*这题其实之前写个多个了,Dijkstra的,SPFA的,STL(TLE了)的,动态链表的,静态链表的,这次是想写一次数组模拟链表的没想到,意外差点让人亡if1 AC ,if2WA,苦逼了几个小时(各处查看好久才发现是这里不对劲),开始不对劲也没找到头路,之前因为直接写了relax()的函数,从没注意到有什么,归根结底对于松弛和入队的理解不够深刻啊,这是两个过程,我的if2显然是不能满足的,想偷懒省几行代码的,好吧,就这样苦逼的艰难前行好了*/#include<stdio.h>#include<string.h>const int V = 30001, E=150001;const int INF=0x3F3F3F3F;int d[V],n,m;int head[V],pnt[E],cost[E],nxt[E],e;void addedge(int u,int v,int c){ pnt[e]=v; cost[e]=c; nxt[e]=head[u]; head[u]=e++;}bool relax(int u,int v,int w){ if(d[v]>d[u]+w) { d[v]=d[u]+w; return 1; } return 0;}int spfa(){ int Q[E],vis[V]; int i; for(i=2;i<=n;++i) { d[i]=INF; vis[i]=0; } vis[1]=1; d[1]=0; int top=1; Q[0]=1; int u,v,w; while(top) { u=Q[--top]; vis[u]=0; for(i=head[u];i!=-1;i=nxt[i]) { v=pnt[i]; w=cost[i]; if((d[v]>w+d[u]) && !vis[v] )//if2 /// if(1 == relax(u,v,w) && !vis[v])//if1 { d[v]=d[u]+w; Q[top++]=v; vis[v]=1; } } } return d[n];}int main(){ scanf("%d%d",&n,&m); e=0; int u,v,w; int i = 0,res; memset(head,-1,sizeof(head)); for(i = 0; i < m; ++ i) { scanf("%d%d%d",&u,&v,&w); addedge(u,v,w); } res=spfa(); printf("%d ",res); return 0;}
- 关于SPFA,记一点小悲催 poj 3159
- poj-3159,SPFA+堆栈
- poj 3159 SPFA+手写栈
- poj 3159 -- Candies ( spfa + 栈 )
- poj 3159 Candies------spfa算法
- POJ 3159 Candies(SPFA+stack)
- poj 3159 Candies (spfa+stack)
- POJ 3159(spfa + 数组模拟)
- POJ 3159 Candies 差分约束+spfa
- poj 3159 Candies 差分约束 + spfa
- POJ 3159 SPFA最短路径
- POJ-3159-Candies(SPFA+模拟栈)
- poj 3159(spfa最短路径)
- POJ 3159Candies 栈模拟SPFA
- SPFA+Stack||Dijkstra+Heap-POJ-3159-Candies
- POJ 3159 Candies(dijkstra+heap&spfa+stack)
- POJ 3159 差分约束系统+spfa
- POJ 3159 Candies【差分约束+SPFA】
- 挖雷游戏的概率
- Flsh SOCKET开发经验总结
- 毕业后第一次总结
- 办公室里最不适合谈论的问题
- 10种心理征兆表明是时候辞职了!
- 关于SPFA,记一点小悲催 poj 3159
- 分享Silverlight/WPF/Windows Phone/HTML5一周学习导读(4月16日-4月22日)
- Nodejs中文文档
- LINUX内核模块编程
- hdu1671 Phone List
- 什么是报表
- 网络精神
- 关于线程的执行和退出
- http://www.soaspx.com/dotnet/asp.net/tech/tech_20100928_5785.html