【POJ】3259 Wormholes
题目链接:http://poj.org/problem?id=3259
题意:n个农场,m条双向路径,w条单向路径(虫洞)。单向虫洞路径是负值。农夫想知道自己能不能看到自己(X)。
题解:其实刚开始没太读懂题意。然后其实如果他能看到自己,说明已经通过虫洞形成了一个负环。也就是通过spfa寻找负环(负权回路)。这里的判断就是加一个cnt[]数组记录该点的入队次数,大于等于n说明已经形成负环。
代码:
1 #include<iostream> 2 #include<cstdio> 3 #include<stack> 4 #include<vector> 5 #include<queue> 6 #include<algorithm> 7 using namespace std; 8 const int maxn = 2e5+7; 9 const int inf = 0xffffff; 10 vector< pair<int,int> > e[maxn]; 11 12 int n,m,w; 13 int d[maxn],inq[maxn]; 14 int cnt[maxn]; 15 16 void init(){ 17 for(int i = 0; i <= n; i++) 18 e[i].clear(); 19 } 20 21 void spfa(){ 22 for(int i = 0 ;i <= n ; i++) 23 inq[i] = 0,d[i] = inf,cnt[i] = 0; 24 queue<int>Q; 25 Q.push(1); 26 d[1] = 0; 27 inq[1] = 1; 28 cnt[1] = 1; 29 while( !Q.empty() ){ 30 int u = Q.front(); 31 Q.pop(); 32 inq[u] = 0; 33 for(int i = 0; i < e[u].size() ; i++){ 34 int v = e[u][i].first; 35 int val = e[u][i].second; 36 if(d[v] > d[u] + val){ 37 d[v] = d[u] + val; 38 if(inq[v] == 0){ 39 cnt[v]++; 40 inq[v] = 1; 41 if(cnt[v] >= n){ //判定一点入队次数大于总顶点数,存在负环 42 printf("YES\n"); 43 return; 44 } 45 Q.push(v); 46 } 47 } 48 } 49 50 } 51 printf("NO\n"); 52 } 53 int main() { 54 int F; 55 cin>>F; 56 while(F--){ 57 cin>>n>>m>>w; 58 init(); 59 //双向正权 60 int x,y,z; 61 for(int i = 1; i <= m ;i++){ 62 cin>>x>>y>>z; 63 e[x].push_back(make_pair(y,z)); 64 e[y].push_back(make_pair(x,z)); 65 } 66 //单向负权 67 for(int i = 1; i <= w; i++){ 68 cin>>x>>y>>z; 69 e[x].push_back(make_pair(y,-z)); 70 } 71 spfa(); 72 } 73 74 return 0; 75 }
转载于:https://www.cnblogs.com/Asumi/p/9739911.html
【POJ】3259 Wormholes相关推荐
- 【POJ】1067 取石子游戏(博弈论)
Description 有两堆石子,数量任意,可以不同.游戏开始由两个人轮流取石子.游戏规定,每次有两种不同的取法,一是可以在任意的一堆中取走任意多的石子:二是可以在两堆中同时取走相同数量的石子.最后 ...
- 【POJ】2676-Sudoku 【51Nod】1211-数独(DFS)
[POJ]2676-Sudoku Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 25200 Accepted: 11782 Sp ...
- 【POJ】 1014 Dividing(多重背包,优化)
[POJ] 1014 Dividing(多重背包,优化) [题目链接]http://poj.org/problem?id=1014 题目 Description Marsha and Bill own ...
- 【POJ】1456 supermarket
[POJ]1456 supermarket 给定 n 件物品,第 i件物品有如下信息: 卖出去可以得到pi的收益. 过期时间为di ,过了过期时间就不能再卖出去. 卖掉一件物品要用 1 的时间,求最大 ...
- 【POJ/算法】 3259 Wormholes(Bellman-Ford算法, SPFA ,FLoyd算法)
Bellman-Ford算法 Bellman-Ford算法的优点是可以发现负圈,缺点是时间复杂度比Dijkstra算法高.而SPFA算法是使用队列优化的Bellman-Ford版本,其在时间复杂度和编 ...
- 【POJ】3268 Silver Cow Party (将有向图的边反转)
问题链接:http://poj.org/problem?id=3268 [问题描述] One cow from each of N farms (1 ≤ N ≤ 1000) conveniently ...
- 【POJ】1308 Is It A Tree?((并查集 + set)or (map))
http://poj.org/problem?id=1308 这个题数组开到200就可以了,但题目中貌似没有说呢? 读入每一对顶点,看看他们是否在同一个集合中,如果是的话,肯定成环,不是一棵树. 用s ...
- 【POJ】3617 Best Cow Line (字典序 字符串)
http://poj.org/problem?id=3617 给定长度为N(1≤N≤2000)的字符串S,要构造一个长度为N的字符串T.期初,T是一个空串,随后反复进行下列任意操作. 从S的头部删除一 ...
- 【POJ】2377 Bad Cowtractors(最大生成树)
简单题,模板题 求解最大生成树,提交一直WA,感觉没有什么问题啊,就是在求解最小生成树的模板基础上稍加修改即可,后来发现在输出a,b,c给map二维数组的时候还必须有判断条件,略为有点坑,因为之前做的 ...
最新文章
- Centos下源码安装git
- 解开一个困扰自己多时的小问题
- 存储过程结果更改编码_Docker安装Minio存储服务器详解
- maven ant_如何在Maven中运行Ant目标?
- python 拆分字符串反斜杠_每日一课 | Python 拆分字符串入到字典里面
- Python-OpenCV训练一个人脸识别器
- click事件的执行顺序
- response.sendRedirect()与request.getRequestDispatcher().forward()区别
- 关注公众号回复图片php,公众号被关注回复可以回复文字加图片消息吗? | 微信公众号指南...
- 数据结构几个最简单的阐述完整版(带你入门:链表,栈,队列,哈希表,树)通俗易懂简单明了
- op反馈电阻并联反馈电容
- UML 之 顺序图(Sequence Diagram)
- 实现图的邻接矩阵和邻接表的存储
- 初识思科模拟器7.2
- 志愿者打卡器服务器无响应,【转发】“志愿者打卡器”普及贴
- 用wingrub从硬盘安装linux
- requirejs html缓存问题,requirejs 缓存问题
- IATF16949认证辅导,IATF16949涵盖汽车行业特定要求和辅导工具以及再整个供应链中减少变差和浪费的质量管理体系
- 关于实现宿舍共享校园网上网的几种方法~
- 富勒烯C42、富勒烯-甘氨酸衍生物、聚合物PVP-富勒烯(C60)