Hdoj 1317 XYZZY
来源:互联网 发布:java项目怎么打包上线 编辑:程序博客网 时间:2024/06/08 00:22
题目传送门
建图后,本题考察1到n这两个点是否联通,以及求最长路判断正环,floyd()判断连通性,spfa判断是否有正环即可。 Talk is cheap.Show coder.
#include<cstdio>#include<cstring>#include<cctype>#include<queue>#include<algorithm>#include<iostream>using namespace std;int dis[110],in[110],val[110];bool maze1[110][110],maze2[110][110];int n;void Floyd(){ for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) for(int k=1;k<=n;k++) maze2[i][j]=(maze2[i][j]||(maze2[i][k]&&maze2[k][j]));}bool spfa(){ queue<int>Q; Q.push(1); memset(in,0,sizeof(in)); memset(dis,0,sizeof(dis)); dis[1]=100; while(!Q.empty()) { int cur=Q.front(); Q.pop(); in[cur]++; if(in[cur]>=n) return maze2[cur][n]; for(int next=1;next<=n;next++) { if(maze1[cur][next]&&dis[cur]+val[next]>dis[next]&&dis[cur]+val[next]>0) { Q.push(next); dis[next]=dis[cur]+val[next]; } } } if(dis[n]>0) return true; return false;}int main(){ while(~scanf("%d",&n)) { if(n==-1)break; memset(maze1,false,sizeof(maze1)); memset(maze2,false,sizeof(maze2)); for(int i=1;i<=n;i++) { int num,tmp; scanf("%d",&val[i]); scanf("%d",&num); for(int j=1;j<=num;j++) { scanf("%d",&tmp); maze1[i][tmp]=maze2[i][tmp]=true; } } Floyd(); if(!maze2[1][n]) { puts("hopeless"); } else { if(spfa()) puts("winnable"); else puts("hopeless"); } } return 0;}
0 0
- HDOJ 1317 XYZZY
- Hdoj 1317 XYZZY
- 【最短路】 HDOJ 1317 XYZZY
- HDOJ 题目1317 XYZZY(spfa)
- HDOJ 1317 - XYZZY dp(SPFA)+dfs判联通..细心..
- hdoj 1317 XYZZY 【spfa判断正环求最长路径&&floyd求传递闭包】
- HDU-1317 XYZZY SPEA
- hdu 1317:XYZZY
- HDU 1317 XYZZY
- HDU 1317 XYZZY
- HDU 1317 XYZZY
- hdu 1317 XYZZY
- HDU 1317 XYZZY
- HDU 1317 XYZZY
- XYZZY
- XYZZY
- XYZZY
- uva 10557 - XYZZY hdu 1317
- NOIP 2015 简要题解
- H5性能调优
- 【或许要说再见】NOIP2015游记
- 黑马程序员——OC学习笔记 类的进阶使用
- 单例模式
- Hdoj 1317 XYZZY
- get传值,接受中文,乱码处理。
- 核心动画的使用-King
- Android AIDL进程间通信(IPC)
- C++ 中使用dlopen加载动态库
- Android选项切换条SHSegmentControl
- MySQL导入sql文件
- u-boot加载Linux过程
- 创业漫话10(公司的组织形式 下)