博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
POJ 3259 Wormholes
阅读量:7110 次
发布时间:2019-06-28

本文共 1503 字,大约阅读时间需要 5 分钟。

题目连接

 

题意:John的农场里field块地,path条路连接两块地,hole个虫洞,虫洞是一条单向路,不但会把你传送到目的地,而且时间会倒退Ts。我们的任务是知道会不会在从某块地出发后又回来,看到了离开之前的自己。

 

思路:用bellman-ford 判断有没有负权回路,如果有他就能看到自己。 不过,我认为应该判断每个点有没有负权回路,而不仅仅只判断第一个点就行了。

AC代码

#include 
#include
#include
using namespace std;const int VM=520;const int EM=2600;const int INF=0x3f3f3f3f;struct Edge{ int u,v; int cap;}edge[EM<<1];int n,m,k;int cnt,dis[VM];int Bellman(){ int i,j; for(i=1;i<=n;i++) { dis[i]=INF; } dis[1]=0; for(i=1;i<=n;i++) { for(j=1;j<=cnt-1;j++) { if(dis[edge[j].v]>dis[edge[j].u]+edge[j].cap) { dis[edge[j].v]=dis[edge[j].u]+edge[j].cap; } } } for(j=1;j
dis[edge[j].u]+edge[j].cap) { return 0; } } return 1;}int main(){ int t; scanf("%d",&t); while(t--) { scanf("%d%d%d",&n,&m,&k); cnt=1; int u,v,w; while(m--) { scanf("%d%d%d",&u,&v,&w); edge[cnt].u=u; edge[cnt].v=v; edge[cnt++].cap=w; edge[cnt].u=v; edge[cnt].v=u; edge[cnt++].cap=w; } while(k--) { scanf("%d%d%d",&u,&v,&w); edge[cnt].u=u; edge[cnt].v=v; edge[cnt++].cap=-w; } int ans=Bellman(); if(ans==0){ printf("YES\n"); } else { printf("NO\n"); } } return 0;}

 

 

转载地址:http://jclhl.baihongyu.com/

你可能感兴趣的文章
linux sar 命令详解
查看>>
asp.net mvc controller调用js
查看>>
the smallest positive number
查看>>
7件你不知道但可以用CSS做的事
查看>>
微信lbs---返回两个经纬度坐标点的距离
查看>>
hdu 4717 The Moving Points(三分)
查看>>
13 集合
查看>>
PRTG参考价格
查看>>
jfinal框架教程-学习笔记(二)
查看>>
MapReduce实现排序功能
查看>>
SSH框架总结(框架分析+环境搭建+实例源代码下载)
查看>>
iOS IAP教程
查看>>
Fragment
查看>>
转发)微博短网址生成算法原理
查看>>
Android静态图片人脸识别的完整demo(附完整源码)
查看>>
Oracle 11g安装GI后,运行roothas.pl脚本报错libcap.so.1找不到
查看>>
Why Hadoop2
查看>>
Git操作指南
查看>>
FORM验证简单demo
查看>>
FindWindow使用方法
查看>>