简直是对自己无语啊,代码风格出了点问题,自己加了一些不应该加的东西,结果wa到没边了。

这个题目就是需要考虑的就是正环的问题,还有就是是否1和n连通的问题。

连通性考虑floyd算法即可。然后这个判断正环的问题就需要bellman_ford了,写这个的时候发现了其实bellman_ford不必按照模版上教的一定要初始化d为INF,其实是可以初始化为0,然后求最大路的。因为题目要求的是问的是是否有可能达到这个终点,那么如果存在环路的话,可以经过M次多的环之后使得即使后面路再有负数也没多大影响了的。然后这样的话,只需要判断某个点出现的次数是否大于等于n就可以判断是否存在环了。

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<queue>using namespace std;const int INF=0x3f3f3f3f;
const int maxn=1000;
int n;
int w,d[maxn],counts[maxn],u,v,num;
bool ds[maxn][maxn];struct Edge
{int u,v,val;
};vector<Edge>edge;
vector<int> g[maxn];void init()
{for(int i=0;i<=n;i++)g[i].clear();edge.clear();
}void add_edge(int u,int v,int w)
{Edge p;p.u=u;p.v=v;p.val=w;edge.push_back(p);g[u].push_back(edge.size()-1);
}void floyd()
{for(int k=1;k<=n;k++){for(int i=1;i<=n;i++){for(int j=1;j<=n;j++){ds[i][j]|=ds[i][k]&&ds[k][j];}}}
}bool bellman_fold()
{queue<int> q;memset(d,0,sizeof(d));memset(counts,0,sizeof(counts));d[1]=100;q.push(1);while(!q.empty()){int now=q.front();q.pop();counts[now]++;if(counts[now]>=n) return ds[now][n];for(int i=0;i<g[now].size();i++){Edge e=edge[g[now][i]];if(d[e.u]+e.val>d[e.v]&&d[e.u]+e.val>0){d[e.v]=d[e.u]+e.val;q.push(e.v);}}}return d[n]>0;
}int main()
{while(scanf("%d",&n)!=EOF){if(n==-1)break;memset(ds,0,sizeof(ds));init();for(int i=1;i<=n;i++){scanf("%d%d",&w,&num);for(int j=1;j<=num;j++){scanf("%d",&v);add_edge(i,v,w);ds[i][v]=1;}}floyd();if(!ds[1][n]){printf("hopeless\n");}else{if(bellman_fold()){printf("winnable\n");}elseprintf("hopeless\n");}}return 0;
}

HDU 1317 一路wa到西天相关推荐

  1. hdu 1317 XYZZY【Bellheman_ford 判断正环小应用】

    链接: http://acm.hdu.edu.cn/showproblem.php?pid=1317 http://acm.hust.edu.cn/vjudge/contest/view.action ...

  2. HDU 1317 XYZZY(floyd+bellman_ford判环)

    http://acm.hdu.edu.cn/showproblem.php?pid=1317 题意: 给出一个有向图,每到达一个点,都会加上或减去一些能量,我们要做的就是判断从1出发是否能到达n.初始 ...

  3. hdu 1317——XYZZY

    http://blog.csdn.net/dongshimou/article/details/35984917

  4. HDU 1317 XYZZY

    大意:起始点100HP,给定n个房间,进入房间内加上或者减去 wHP,同一房间可以进入多次,问能否到达终点(HP大于0).起点0,终点n-1. 思路: 假设图中没有环,如果要到达终点,则需让剩下的HP ...

  5. HDU.1009 FatMouse' Trade

    文章目录 一.题目解读 1.原题 2.分类 3.题意 4.输入输出格式 5.数据范围 二.题解参考 1.总体思路 2.思路① (1).分析 (2).一些数据 (3).AC代码 三.评价与后话 1.评价 ...

  6. 最短路径问题经典题目汇总

    50道数据结构最短路径问题 HDU 1142 http://acm.hdu.edu.cn/showproblem.php?pid=1142 HDU 1217 http://acm.hdu.edu.cn ...

  7. 8-12-COMPETITION

    链接:最短路 A.HDU 2544    最短路 算是最基础的题目了吧.............我采用的是Dijkstra算法....... 代码: 1 #include <iostream&g ...

  8. 杭电OJ分类题目(4)-Graph

    原题出处:HDOJ Problem Index by Type,http://acm.hdu.edu.cn/typeclass.php 杭电OJ分类题目(4) HDU Graph Theory - U ...

  9. 再看《西游记》——吴承恩眼中的现实社会是如何折射到《西游记》中的

    一.<西游记>其实是一个时代的映照,是一种启蒙思潮的载体,只不过它所代表的启蒙思潮却在中国被扼杀掉了 对于<西游记>,我们给与了较多.较高的美学评价,但如果只是把<西游记 ...

  10. 西游记中被孙悟空打死的妖怪

    西游记中被孙悟空打死的妖怪 我们知道西游记中孙悟空是天生石猴 ,从师菩提老祖习得七十二变和筋斗云等绝技和长生不老之术,后大闹天宫被如来佛祖降服,压到五行山五百年,后观世音菩萨点化拜唐僧为师保护唐僧西去 ...

最新文章

  1. numpy.savetxt()保存两列
  2. MFC视图滚动条的基本使用和C语言输出三角形的MFC版本
  3. 开始认真学习Android了
  4. 【maven】dependency的systemPath属性:引入本地系统中的jar
  5. java 中的servlet_java中的Servlet
  6. labimage 怎样旋转图片_大理石旋转楼梯的测量方法,你学会了吗?
  7. table 设置边框
  8. 常用的Struts 2.0的标志(Tag)介绍
  9. 程序员面试金典 - 面试题 17.12. BiNode(BST中序遍历)
  10. 防火防盗竟防不了网络攻击智能摄像机的网络安全怎么办?
  11. 不给糖果就捣乱,用Python绘制有趣的万圣节南瓜怪【华为云分享】
  12. MVC中关于JSON的处理
  13. Atitit 遍历文件夹目录解决方案与规范 attilax总结 1. 规范 2 1.1. 注意的不要同时改变文件夹内容,增删文件。这样获取到的目录list不会变化 2 1.2. 主义中文名称文件读写
  14. linux和windows php pdf转图片,扩展安装imagick和ImageMagick
  15. 洛谷 P1489 猫狗大战
  16. 人工智能导论笔记-第四章-不确定性推理方法
  17. Excel2010条件格式结合公式和格式刷使用存在严重bug
  18. MapGuide应用程序示例——你好,MapGuide!
  19. 指针 Swap交换函数
  20. 浙江省初级中级工程师职称评审条件

热门文章

  1. Spring boot 集成Quartz,实现Job注入bean
  2. Blk read/s Blk wrtn/s Blk read Blk wrtn分别代表什么意思
  3. 微型计算机硬件系统基本组成是什么,计算机硬件系统基本组成有什么?
  4. 字符数组动态开辟空间和静态开辟空间
  5. centos7下修改mysql8表名_CentOS7系统下修改mysql8.0版本密码
  6. 通过调用ffmpeg来将mp3和jpg合并为mp4视频-批处理。
  7. NTFS与FAT32区别大揭秘
  8. 全球新冠疫情可视化图表制作
  9. Contrastive Loss
  10. mysql数据库字符集实践详解_mysql数据库 详解 之 自学成才1