XYZZY spfa 最长路 判环
题意:
有n个点 m条边 每个边有权值
一开始有一百血 每次经过一条路都会加上其权值
判断是否能够到达n
显然 有正环的时候肯定能够到达
最短路好题!!!!!!!
显用folyed判断是否联通
然后用spfa更新最长路
因为每次更新的都是最长路 所有有环的时候肯定是正环 这时候直接return即可
- #include<bits/stdc++.h>
- using namespace std;
- //input by bxd
- #define rep(i,a,b) for(int i=(a);i<=(b);i++)
- #define repp(i,a,b) for(int i=(a);i>=(b);--i)
- #define RI(n) scanf("%d",&(n))
- #define RII(n,m) scanf("%d%d",&n,&m)
- #define RIII(n,m,k) scanf("%d%d%d",&n,&m,&k)
- #define RS(s) scanf("%s",s);
- #define ll long long
- #define REP(i,N) for(int i=0;i<(N);i++)
- #define CLR(A,v) memset(A,v,sizeof A)
- //////////////////////////////////
- #define inf 0x3f3f3f3f
- #define INF 0x3f3f3f3f
- #define N 300
- struct node
- {
- int v,to,nex;
- }edge[];
- int head[N],pos=;
- void add(int a,int b,int c)
- {
- edge[++pos].nex=head[a];
- head[a]=pos;
- edge[pos].v=c;
- edge[pos].to=b;
- }
- int mp[N][N];
- int n;
- int vis[N];
- int dis[N];
- int cnt[N];
- bool spfa()
- {
- rep(i,,n)
- {
- vis[i]=;
- dis[i]=-inf;//求最长路
- cnt[i]=;
- }
- queue<int>q;
- q.push();
- vis[]=;
- cnt[]=;
- dis[]=;
- while(!q.empty())
- {
- int u=q.front();q.pop();
- vis[u]=;
- for(int i=head[u];i;i=edge[i].nex)
- {
- int v=edge[i].to;
- if(dis[v]<dis[u]+edge[i].v && dis[u]+edge[i].v> )
- {
- dis[v]=dis[u]+edge[i].v;
- if(!vis[v])
- {
- cnt[v]++;
- if(cnt[v]>n)return mp[v][n];//这里写成mp[i][n]dubug了一个小时
- vis[v]=;
- q.push(v);
- }
- }
- }
- }
- return dis[n]>;
- }
- int main()
- {
- while(RI(n)&&n!=-)
- {
- rep(i,,n)rep(j,,n)if(i!=j)mp[i][j]=;else mp[i][j]=;
- pos=;
- CLR(head,);
- rep(i,,n)
- {
- int v,k;RII(v,k);
- while(k--)
- {
- int x;
- RI(x);
- mp[i][x]=;
- add(i,x,v);
- }
- }
- rep(k,,n)
- rep(i,,n)
- rep(j,,n)
- mp[i][j]=mp[i][j]||mp[i][k]&&mp[k][j];
- if(!mp[][n]) printf("hopeless\n");
- else
- {
- if(spfa()) printf("winnable\n");
- else printf("hopeless\n");
- }
- }
- return ;
- }
XYZZY spfa 最长路 判环的更多相关文章
- 【bzoj1179】[Apio2009]Atm Tarjan缩点+Spfa最长路
题目描述 输入 第一行包含两个整数N.M.N表示路口的个数,M表示道路条数.接下来M行,每行两个整数,这两个整数都在1到N之间,第i+1行的两个整数表示第i条道路的起点和终点的路口编号.接下来N行,每 ...
- poj 1932 XYZZY(spfa最长路+判断正环+floyd求传递闭包)
XYZZY Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 4154 Accepted: 1185 Description ...
- POJ2240:Arbitrage(最长路+正环)
Arbitrage Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 29374 Accepted: 12279 题目链接: ...
- 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 ...
- 洛谷 P3119 [USACO15JAN]草鉴定Grass Cownoisseur (SCC缩点,SPFA最长路,枚举反边)
P3119 [USACO15JAN]草鉴定Grass Cownoisseur 题目描述 In an effort to better manage the grazing patterns of hi ...
- POJ3160强连通+spfa最长路(不错)
题意: 给你一个有向图,每个点上有一个权值,可正可负,然后给你一些链接关系,让你找到一个起点,从起点开始走,走过的边可以在走,但是拿过权值的点就不能再拿了,问最多能拿到多少权值? 思路: ...
- HDU 6201 2017沈阳网络赛 树形DP或者SPFA最长路
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6201 题意:给出一棵树,每个点有一个权值,代表商品的售价,树上每一条边上也有一个权值,代表从这条边经过 ...
- Tarjan缩点+Spfa最长路【p3627】[APIO2009] 抢掠计划
Description Siruseri 城中的道路都是单向的.不同的道路由路口连接.按照法律的规定, 在每个路口都设立了一个 Siruseri 银行的 ATM 取款机.令人奇怪的是,Siruseri ...
- [BZOJ1663] [Usaco2006 Open]赶集(spfa最长路)
传送门 按照时间t排序 如果 t[i] + map[i][j] <= t[j],就在i和j之间连一条边 然后spfa找最长路 #include <queue> #include &l ...
随机推荐
- mysql常用的用户授权语句
一:授权主要的 SQL //某个数据库所有的权限 ALL 后面+ PRIVILEGES GRANT ALL PRIVILEGES ON 库名.* TO '用户'@'%' IDENTIFIED BY ' ...
- hive字段名、注释中文显示问号
问题如下图: 解决方法: header1的/etc/my.conf文件,在[mysqld]分组下面添加配置:character-set-server=utf8init_connect='SET NAM ...
- Redies安装,修配置,设置密码,
Redies下载路径:https://github.com/MicrosoftArchive/redis/releases 我下的是Redis-x64-3.2.100.msi 下载后安装,一步一步操作 ...
- JAVA课设个人博客--多源数据教学管理系统
JAVA课设个人博客--多源数据教学管理系统 1.团队课程设计博客链接 https://www.cnblogs.com/hq9-/p/10278470.html 2. 个人负责模块或任务说明 主要模块 ...
- 解决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 ...
- mysql8用户管理
查看当前登录用户: 创建用户: create user '用户名'@'主机地址' identified with mysql_native_password by '密码'; 修改密码: alter ...
- sorted
排序是编程中经常使用到的算法,无论哪种排序算法, 本质上都是比较两个元素的大小.如果是数字,可以直接比较,但是如果是字符串或者是dict呢?直接比较数学上的大小是没有意义的,因此,比较的过程必须通过函 ...
- Redis代码——Python篇
需要安装的库:redis import redis # 连接数据库 r = redis.StrictRedis(host="localhost", port=6379, passw ...
- Corn Fields POJ - 3254 (状压dp)
题目链接: Corn Fields POJ - 3254 题目大意:给你一个n*m的矩阵,矩阵的元素只包括0和1,0代表当前的位置不能放置人,1代表当前的位置可以放人,当你决定放人的时候,这个人的四 ...
- 【转】pyhton之Reportlab模块——生成pdf文件
[转]pyhton之Reportlab模块 reportlab模块是用python语言生成pdf文件的模块 安装:pip install reportlab 模块默认不支持中文,如果使用中文需要注册 ...