poj3259 - Wormholes
2012-08-16 10:10
162 查看
想看更多的解题报告:
http://blog.csdn.net/wangjian8006/article/details/7870410
转载请注明出处:http://blog.csdn.net/wangjian8006
题目大意:虫洞问题,现在有n个点,m条边,代表现在可以走的通路,比如从a到b和从b到a需要花费c时间,现在在地上出现了w个虫洞,虫洞的意义就是你从a到b话费的时间是-c(时间倒流,并且虫洞是单向的),现在问你从某个点开始走,能回到从前
解题思路:其实给出了坐标,这个时候就可以构成一张图,然后将回到从前理解为是否会出现负权环,用bellman-ford就可以解出了
http://blog.csdn.net/wangjian8006/article/details/7870410
转载请注明出处:http://blog.csdn.net/wangjian8006
题目大意:虫洞问题,现在有n个点,m条边,代表现在可以走的通路,比如从a到b和从b到a需要花费c时间,现在在地上出现了w个虫洞,虫洞的意义就是你从a到b话费的时间是-c(时间倒流,并且虫洞是单向的),现在问你从某个点开始走,能回到从前
解题思路:其实给出了坐标,这个时候就可以构成一张图,然后将回到从前理解为是否会出现负权环,用bellman-ford就可以解出了
/* Memory 196K Time 63MS */ #include <iostream> using namespace std; #define MAXM 2710 #define MAXV 505 #define inf 1<<29 struct{ int x,y,t; }edge[MAXM]; int n,m,w; int bellman_ford(){ int i,j,d[MAXV],flag=1,cnt=1; for(i=1;i<=n;i++) d[i]=inf; while(flag){ flag=0; if(cnt++>n) return 1; for(i=1;i<=m;i++){ if(d[edge[i].x]+edge[i].t<d[edge[i].y]) {d[edge[i].y]=d[edge[i].x]+edge[i].t;flag=1;} if(d[edge[i].y]+edge[i].t<d[edge[i].x]) {d[edge[i].x]=d[edge[i].y]+edge[i].t;flag=1;} } for(;i<=m+w;i++) if(d[edge[i].y]>d[edge[i].x]-edge[i].t) {d[edge[i].y]=d[edge[i].x]-edge[i].t;flag=1;} } return 0; } int main(){ int t,i; scanf("%d",&t); while(t--){ scanf("%d%d%d",&n,&m,&w); for(i=1;i<=m+w;i++) scanf("%d%d%d",&edge[i].x,&edge[i].y,&edge[i].t); if(bellman_ford()) printf("YES\n"); else printf("NO\n"); } return 0; }
相关文章推荐
- poj3259 Wormholes
- POJ3259 Wormholes(spfa判断负环模板题)
- POJ3259 - Wormholes(连通图判断负环)
- POJ3259 Wormholes (BellmanFord)
- POJ3259 Wormholes 真尼玛坑爹!!!!!!
- poj3259 Wormholes
- POJ3259 Wormholes
- POJ3259 Wormholes(虫洞)(Bellman-floyd法解决)
- POJ3259-Wormholes(SPFA 判负环)
- poj3259 Wormholes
- POJ3259----Wormholes(最短路)
- poj3259 Wormholes (Bellman-Ford算法)
- POJ3259 - Wormholes - 最短路判负环
- POJ3259 Wormholes 洛谷P3385 【模板】负环
- POJ3259 Wormholes(最短路,有无负环,spfa,模板)
- poj3259——Wormholes
- POJ3259 Wormholes
- POJ3259 Wormholes 【Bellmanford判断是否存在负回路】
- POJ3259-Wormholes
- POJ3259——Wormholes