这题,我在学搜索的时候做过。不过好像不叫这名字。

  1、先用Floyd算法判断图的连通性。如果1与n是不连通的,输出hopeless。

  2、用Bellman_Ford算法判断是否有正圈,如果某点有正圈,并且该点与第n点是连通的。就输出winnable。当然,没有正圈的情况下,可以到达也是可以的。然后就是如何找正圈的问题。Bellman_Ford算法可以判断有没有负圈。Bellman_Ford是解决最短路问题的,核心是松弛法。如果dist[v]<dist[u]+Map[u][v],则dist[v]=dist[u]+Map[u][v]。在循环n-1次以后,如果还存在dist[v]<dist[u]+Map[u][v],则说明有负圈。这样,我们找正圈也有方法了:dist数组初始化为负无穷。如果dist[v]>dist[u]+Map[u][v],则dist[v]=dist[u]+Map[u][v]。循环n-1次以后,如果还存在dist[v]>dist[u]+Map[u][v],则说明有正圈。

  其中,要注意的是。可以往下一房间走的条件是当前的能量值大于0。

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int N = , M = N*N/, INF=0x3f3f3f3f;
int dist[N],f[N][N], g[N];
struct node
{
int x,y;
}e[M];
int n,m;
void floyd()
{
int i,j,k;
for(k=;k<=n;k++)
for(i=;i<=n;i++)
for(j=;j<=n;j++)
f[i][j]=f[i][j]||(f[k][j]&&f[i][k]); }
bool bellman_ford(int s)
{
int i,j,k;
for(i=;i<=n;i++) dist[i]= -INF;
dist[s]=;
for(i=;i<n;i++) //n-1次
{
for(j=;j<m;j++)
{
int x=e[j].x, y=e[j].y;
if(dist[y]<dist[x] + g[y]&&dist[x]+g[y]>)
dist[y]=dist[x] + g[y];
}
}
for(j=;j<m;j++)
{
int x=e[j].x, y=e[j].y;
if(dist[y]<dist[x] + g[y]&&dist[x]+g[y]>&&f[y][n]) return ; //有负环回路
}
return dist[n]>;
}
int main()
{
//freopen("test.txt","r",stdin);
int i,j,k,t;
while(scanf("%d",&n)!=EOF)
{
if(n==-) break;
m=;
memset(f,,sizeof(f));
for(i=;i<=n;i++)
{
scanf("%d%d",&g[i],&j);
while(j--)
{
scanf("%d",&k);
f[i][k]=;
e[m].x=i;e[m].y=k;
m++;
}
}
floyd();
if(!f[][n])
{
printf("hopeless\n");
continue;
}
if(bellman_ford()) printf("winnable\n");
else printf("hopeless\n");
}
return ;
}

  PS:我感觉写解题报告还是很有必要的。让自己去总结,弄明白解题思路。当然,也可以给别人提供一些思路。

最新文章

  1. 如何升级PowerShell
  2. ABP理论学习之Nuget包
  3. 可在广域网部署运行的QQ高仿版 -- GG叽叽(源码)
  4. yaf框架流程二
  5. Delphi TdxBarManager通过代码生成菜单
  6. HTML5学习参考资料整理
  7. hdoj 2896 病毒侵袭(AC自动机)
  8. WCF技术剖析之二十七: 如何将一个服务发布成WSDL[基于WS-MEX的实现](提供模拟程序)
  9. Github Pages 静态网页建站
  10. 使用Java编写的B*算法
  11. Angular Cookies 操作
  12. SVO环境搭建
  13. c语言程序设计第4周编程练习(素数和)
  14. 如何获取自己想要模拟的APP的相关图片?
  15. python中sqlite问题和坑
  16. Serializers 序列化组件
  17. Nginx 学习专栏
  18. 一个linux 4.9,4.14内核的bbr带宽估计偏低问题
  19. 【BLUESKY的NOIp模拟赛】解题报告
  20. jquery ajax 全局事件

热门文章

  1. Python笔记(29)----进程
  2. 蒟蒻的长链剖分学习笔记(例题:HOTEL加强版、重建计划)
  3. 洛谷 P1059 明明的随机数
  4. Nginx设置alias别名目录访问phpmyadmin
  5. ubuntu 16.04 忘记登录密码的解决办法
  6. 45.mapping建立、修改
  7. EditorLineEnds.ttr的困扰
  8. n!最末尾非0数
  9. BZOJ 3037 创世纪 树形DP
  10. 安卓实现序列化之Parcelable接口