题意:

有n个点  m条边  每个边有权值

一开始有一百血  每次经过一条路都会加上其权值

判断是否能够到达n

显然  有正环的时候肯定能够到达

最短路好题!!!!!!!

显用folyed判断是否联通

然后用spfa更新最长路

因为每次更新的都是最长路  所有有环的时候肯定是正环  这时候直接return即可

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. //input by bxd
  4. #define rep(i,a,b) for(int i=(a);i<=(b);i++)
  5. #define repp(i,a,b) for(int i=(a);i>=(b);--i)
  6. #define RI(n) scanf("%d",&(n))
  7. #define RII(n,m) scanf("%d%d",&n,&m)
  8. #define RIII(n,m,k) scanf("%d%d%d",&n,&m,&k)
  9. #define RS(s) scanf("%s",s);
  10. #define ll long long
  11. #define REP(i,N) for(int i=0;i<(N);i++)
  12. #define CLR(A,v) memset(A,v,sizeof A)
  13. //////////////////////////////////
  14. #define inf 0x3f3f3f3f
  15. #define INF 0x3f3f3f3f
  16. #define N 300
  17. struct node
  18. {
  19. int v,to,nex;
  20. }edge[];
  21. int head[N],pos=;
  22. void add(int a,int b,int c)
  23. {
  24. edge[++pos].nex=head[a];
  25. head[a]=pos;
  26. edge[pos].v=c;
  27. edge[pos].to=b;
  28. }
  29.  
  30. int mp[N][N];
  31. int n;
  32.  
  33. int vis[N];
  34. int dis[N];
  35. int cnt[N];
  36.  
  37. bool spfa()
  38. {
  39. rep(i,,n)
  40. {
  41. vis[i]=;
  42. dis[i]=-inf;//求最长路
  43. cnt[i]=;
  44. }
  45. queue<int>q;
  46. q.push();
  47.  
  48. vis[]=;
  49. cnt[]=;
  50. dis[]=;
  51. while(!q.empty())
  52. {
  53. int u=q.front();q.pop();
  54. vis[u]=;
  55. for(int i=head[u];i;i=edge[i].nex)
  56. {
  57. int v=edge[i].to;
  58. if(dis[v]<dis[u]+edge[i].v && dis[u]+edge[i].v> )
  59. {
  60. dis[v]=dis[u]+edge[i].v;
  61. if(!vis[v])
  62. {
  63. cnt[v]++;
  64. if(cnt[v]>n)return mp[v][n];//这里写成mp[i][n]dubug了一个小时
  65. vis[v]=;
  66. q.push(v);
  67. }
  68. }
  69. }
  70. }
  71. return dis[n]>;
  72. }
  73.  
  74. int main()
  75. {
  76. while(RI(n)&&n!=-)
  77. {
  78. rep(i,,n)rep(j,,n)if(i!=j)mp[i][j]=;else mp[i][j]=;
  79. pos=;
  80. CLR(head,);
  81.  
  82. rep(i,,n)
  83. {
  84. int v,k;RII(v,k);
  85. while(k--)
  86. {
  87. int x;
  88. RI(x);
  89. mp[i][x]=;
  90. add(i,x,v);
  91. }
  92. }
  93. rep(k,,n)
  94. rep(i,,n)
  95. rep(j,,n)
  96. mp[i][j]=mp[i][j]||mp[i][k]&&mp[k][j];
  97.  
  98. if(!mp[][n]) printf("hopeless\n");
  99. else
  100. {
  101. if(spfa()) printf("winnable\n");
  102. else printf("hopeless\n");
  103. }
  104. }
  105. return ;
  106. }

XYZZY spfa 最长路 判环的更多相关文章

  1. 【bzoj1179】[Apio2009]Atm Tarjan缩点+Spfa最长路

    题目描述 输入 第一行包含两个整数N.M.N表示路口的个数,M表示道路条数.接下来M行,每行两个整数,这两个整数都在1到N之间,第i+1行的两个整数表示第i条道路的起点和终点的路口编号.接下来N行,每 ...

  2. poj 1932 XYZZY(spfa最长路+判断正环+floyd求传递闭包)

    XYZZY Time Limit: 1000MS   Memory Limit: 30000K Total Submissions: 4154   Accepted: 1185 Description ...

  3. POJ2240:Arbitrage(最长路+正环)

    Arbitrage Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 29374   Accepted: 12279 题目链接: ...

  4. HDU1529-Casher Emploryment(最最...最经典的差分约束 差分约束-最长路+将环变线)

    A supermarket in Tehran is open 24 hours a day every day and needs a number of cashiers to fit its n ...

  5. 洛谷 P3119 [USACO15JAN]草鉴定Grass Cownoisseur (SCC缩点,SPFA最长路,枚举反边)

    P3119 [USACO15JAN]草鉴定Grass Cownoisseur 题目描述 In an effort to better manage the grazing patterns of hi ...

  6. POJ3160强连通+spfa最长路(不错)

    题意:       给你一个有向图,每个点上有一个权值,可正可负,然后给你一些链接关系,让你找到一个起点,从起点开始走,走过的边可以在走,但是拿过权值的点就不能再拿了,问最多能拿到多少权值? 思路: ...

  7. HDU 6201 2017沈阳网络赛 树形DP或者SPFA最长路

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6201 题意:给出一棵树,每个点有一个权值,代表商品的售价,树上每一条边上也有一个权值,代表从这条边经过 ...

  8. Tarjan缩点+Spfa最长路【p3627】[APIO2009] 抢掠计划

    Description Siruseri 城中的道路都是单向的.不同的道路由路口连接.按照法律的规定, 在每个路口都设立了一个 Siruseri 银行的 ATM 取款机.令人奇怪的是,Siruseri ...

  9. [BZOJ1663] [Usaco2006 Open]赶集(spfa最长路)

    传送门 按照时间t排序 如果 t[i] + map[i][j] <= t[j],就在i和j之间连一条边 然后spfa找最长路 #include <queue> #include &l ...

随机推荐

  1. mysql常用的用户授权语句

    一:授权主要的 SQL //某个数据库所有的权限 ALL 后面+ PRIVILEGES GRANT ALL PRIVILEGES ON 库名.* TO '用户'@'%' IDENTIFIED BY ' ...

  2. hive字段名、注释中文显示问号

    问题如下图: 解决方法: header1的/etc/my.conf文件,在[mysqld]分组下面添加配置:character-set-server=utf8init_connect='SET NAM ...

  3. Redies安装,修配置,设置密码,

    Redies下载路径:https://github.com/MicrosoftArchive/redis/releases 我下的是Redis-x64-3.2.100.msi 下载后安装,一步一步操作 ...

  4. JAVA课设个人博客--多源数据教学管理系统

    JAVA课设个人博客--多源数据教学管理系统 1.团队课程设计博客链接 https://www.cnblogs.com/hq9-/p/10278470.html 2. 个人负责模块或任务说明 主要模块 ...

  5. 解决reverse改变原数组

    let arr =[1,2,3,4] console.log(arr) //[1,2,3,4] let arr2 = arr; console.log(arr2) //[4,3,2,1] consol ...

  6. mysql8用户管理

    查看当前登录用户: 创建用户: create user '用户名'@'主机地址' identified with mysql_native_password by '密码'; 修改密码: alter ...

  7. sorted

    排序是编程中经常使用到的算法,无论哪种排序算法, 本质上都是比较两个元素的大小.如果是数字,可以直接比较,但是如果是字符串或者是dict呢?直接比较数学上的大小是没有意义的,因此,比较的过程必须通过函 ...

  8. Redis代码——Python篇

    需要安装的库:redis import redis # 连接数据库 r = redis.StrictRedis(host="localhost", port=6379, passw ...

  9. Corn Fields POJ - 3254 (状压dp)

    题目链接: Corn Fields  POJ - 3254 题目大意:给你一个n*m的矩阵,矩阵的元素只包括0和1,0代表当前的位置不能放置人,1代表当前的位置可以放人,当你决定放人的时候,这个人的四 ...

  10. 【转】pyhton之Reportlab模块——生成pdf文件

    [转]pyhton之Reportlab模块 reportlab模块是用python语言生成pdf文件的模块 安装:pip install reportlab 模块默认不支持中文,如果使用中文需要注册 ...