题目链接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=26823

思路:题目的意思是求出所有的能够到达负环的点。负环很好求,spfa即可,然后要求那些可以到达负环的点,其实我们可以反过来想,从负环出发,看能够达到那些顶点。于是我们可以建反图搞定。

  1. #include<iostream>
  2. #include<cstdio>
  3. #include<cstring>
  4. #include<algorithm>
  5. #include<queue>
  6. #include<vector>
  7. using namespace std;
  8. #define MAXN 1111
  9. #define inf 1<<30
  10.  
  11. struct Edge{
  12. int v,w;
  13. Edge(){}
  14. Edge(int vv,int ww):v(vv),w(ww){}
  15. };
  16.  
  17. int n,m,flag;
  18. int dist[MAXN],_count[MAXN];
  19. bool mark[MAXN],vis[MAXN],In_graph[MAXN];
  20.  
  21. vector<vector<Edge> >g;
  22.  
  23. void dfs(int u)
  24. {
  25. vis[u]=true;
  26. for(int i=;i<g[u].size();i++){
  27. int v=g[u][i].v;
  28. if(!vis[v])dfs(v);
  29. }
  30. }
  31.  
  32. void spfa(int st)
  33. {
  34. memset(mark,false,sizeof(mark));
  35. memset(_count,,sizeof(_count));
  36. fill(dist,dist+n+,inf);
  37. queue<int>que;
  38. que.push(st);
  39. dist[st]=;
  40. while(!que.empty()){
  41. int u=que.front();
  42. que.pop();
  43. mark[u]=false;
  44. _count[u]++;
  45. if(_count[u]>n){
  46. flag=;
  47. dfs(u);
  48. }
  49. for(int i=;i<g[u].size();i++){
  50. int v=g[u][i].v,w=g[u][i].w;
  51. if(vis[v])continue;
  52. if(dist[u]+w<dist[v]){
  53. dist[v]=dist[u]+w;
  54. if(!mark[v]){
  55. mark[v]=true;
  56. que.push(v);
  57. }
  58. }
  59. }
  60. }
  61. }
  62.  
  63. int main()
  64. {
  65. int _case,u,v,w,t=;
  66. scanf("%d",&_case);
  67. while(_case--){
  68. scanf("%d%d",&n,&m);
  69. g.clear();
  70. g.resize(n+);
  71. while(m--){
  72. scanf("%d%d%d",&u,&v,&w);
  73. g[v].push_back(Edge(u,w));
  74. }
  75. memset(vis,false,sizeof(vis));
  76. flag=;
  77. for(int i=;i<n;i++)spfa(i);
  78. printf("Case %d:",t++);
  79. if(!flag){
  80. puts(" impossible");
  81. }else{
  82. for(int i=;i<n;i++)if(vis[i])printf(" %d",i);
  83. puts("");
  84. }
  85. }
  86. }

loj 1108(spfa判负环)的更多相关文章

  1. POJ 3259 Wormholes(SPFA判负环)

    题目链接:http://poj.org/problem?id=3259 题目大意是给你n个点,m条双向边,w条负权单向边.问你是否有负环(虫洞). 这个就是spfa判负环的模版题,中间的cnt数组就是 ...

  2. Poj 3259 Wormholes(spfa判负环)

    Wormholes Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 42366 Accepted: 15560 传送门 Descr ...

  3. spfa判负环

    bfs版spfa void spfa(){ queue<int> q; ;i<=n;i++) dis[i]=inf; q.push();dis[]=;vis[]=; while(!q ...

  4. poj 1364 King(线性差分约束+超级源点+spfa判负环)

    King Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 14791   Accepted: 5226 Description ...

  5. 2018.09.24 bzoj1486: [HNOI2009]最小圈(01分数规划+spfa判负环)

    传送门 答案只保留了6位小数WA了两次233. 这就是一个简单的01分数规划. 直接二分答案,根据图中有没有负环存在进行调整. 注意二分边界. 另外dfs版spfa判负环真心快很多. 代码: #inc ...

  6. BZOJ 4898 [APIO2017] 商旅 | SPFA判负环 分数规划

    BZOJ 4898 [APIO2017] 商旅 | SPFA判负环 分数规划 更清真的题面链接:https://files.cnblogs.com/files/winmt/merchant%28zh_ ...

  7. [P1768]天路(分数规划+SPFA判负环)

    题目描述 “那是一条神奇的天路诶~,把第一个神犇送上天堂~”,XDM先生唱着这首“亲切”的歌曲,一道猥琐题目的灵感在脑中出现了. 和C_SUNSHINE大神商量后,这道猥琐的题目终于出现在本次试题上了 ...

  8. LightOj 1221 - Travel Company(spfa判负环)

    1221 - Travel Company PDF (English) Statistics problem=1221" style="color:rgb(79,107,114)& ...

  9. poj 2049(二分+spfa判负环)

    poj 2049(二分+spfa判负环) 给你一堆字符串,若字符串x的后两个字符和y的前两个字符相连,那么x可向y连边.问字符串环的平均最小值是多少.1 ≤ n ≤ 100000,有多组数据. 首先根 ...

随机推荐

  1. TortoiseGit-创建分支、合并分支

    第一步:创建本地分支 点击右键选择TortoiseGit,选择Create Branch-,在Branch框中填写新分支的名称(若选中"switch to new branch"则 ...

  2. ReactJS入门学习二

    ReactJS入门学习二 阅读目录 React的背景和基本原理 理解React.render() 什么是JSX? 为什么要使用JSX? JSX的语法 如何在JSX中如何使用事件 如何在JSX中如何使用 ...

  3. 移动端富文本编辑器artEditor

    摘要: 由于手机上打字比较慢,并不适合长篇大论的文章,所以移动端的富文本编辑器很少.artEditor是一款基于jQuery的移动端富文本编辑器,支持插入图片,后续完善其他功能. 插件地址:https ...

  4. poj1279.Inlay Cutters(模拟 + 枚举)

    Inlay Cutters Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 2367   Accepted: 995 Desc ...

  5. JavaScript中的Function(函数)对象详解

    JavaScript中的Function对象是函数,函数的用途分为3类: 作为普通逻辑代码容器: 作为对象方法: 作为构造函数. 1.作为普通逻辑代码容器 function multiply(x, y ...

  6. 91SDK接入及游戏发布、更新指南

    原地址:http://bbs.18183.com/thread-99382-1-1.html本帖最后由 啊,将进酒 于 2014-4-17 10:23 编辑 1.联系91的商务人员建讨论组或者厂商建Q ...

  7. 台大《机器学习基石》课程感受和总结---Part 1(转)

    期末终于过去了,看看别人的总结:http://blog.sina.com.cn/s/blog_641289eb0101dynu.html 接触机器学习也有几年了,不过仍然只是个菜鸟,当初接触的时候英文 ...

  8. 2015-2-10 Linux 知识

    1.Linux系统中某个可执行文件属于root并且有setid,当一个普通用户mike运行这个程序时,产生的进程的有效用户和实际用户分别是____? A root mike B root rooy C ...

  9. HM必修3

    高中数学必修三 笔记与拓展 算法初步 算法是按照一定规则解决固定问题,通过对输入的某种变换产生结果. 素性测试 检验一个数是否为素数. 试除法 一个数是素数的充分必要条件是它因数个数为二.显然1和它本 ...

  10. Count Numbers with Unique Digits

    Given a non-negative integer n, count all numbers with unique digits, x, where 0 ≤ x < 10n. Examp ...