Atcoder ABC 061D Score Attack 最长路+判环
来源:互联网 发布:果芽软件 编辑:程序博客网 时间:2024/06/15 05:31
点击打开链接
题意:n点,m边的有向带权图,问从1出发到n的最大值为?,若可以无穷大 则输出infn,m<=2e3
求最长路-> 把带权的边变号,等价于求出最短路并判断是否有负环即可
注意该图为有向图,n不一定在负环上,所以用bellmanford求出环上的点 或者 暴力:如果第n-1次的d[n] 不等于 第2*n次的d[n]则一定存在环
#include <bits/stdc++.h>using namespace std;typedef long long ll;const ll inf=1ll<<50;typedef pair<ll,ll> ii;const int N=4e3+20;ll d[N],n,m;vector<ii> e[N];bool neg[N];void calc(){fill(d,d+1+n,inf);memset(neg,false,sizeof(neg));d[1]=0;for(int k=1;k<n;k++)//无环 最多经过n-1条边 {for(int i=1;i<=n;i++){for(int j=0;j<e[i].size();j++){ll v=e[i][j].first,w=e[i][j].second;if(d[i]==inf)continue;if(d[v]>d[i]+w)d[v]=d[i]+w;}}}for(int k=1;k<=n;k++){for(int i=1;i<=n;i++){for(int j=0;j<e[i].size();j++){ll v=e[i][j].first,w=e[i][j].second;if(d[i]==inf)continue;if(d[v]>d[i]+w){d[v]=d[i]+w;neg[v]=true;//标记负环上的点 }if(neg[i]==true)neg[v]=true;}}}if(neg[n]==false)cout<<-d[n]<<endl;elseputs("inf");}int main(){while(cin>>n>>m){for(int i=0;i<=n;i++)e[i].clear();ll u,v,w;while(m--){cin>>u>>v>>w;e[u].push_back(ii(v,-w));}calc();}return 0;}
阅读全文
0 0
- Atcoder ABC 061D Score Attack 最长路+判环
- atcoder-abc-070D
- AtCoder Beginner Contest 061 DScore Attack(Bellman-ford)
- AtCoder Beginner Contest 061 D
- Atcoder D
- atcoder 055D D
- atcoder square869120Contest #4 D
- Atcoder 2334 D
- Atcoder ARC 077 D
- AtCoder-RC078 D
- AtCoder 079D Decrease
- atcoder 062D
- Atcoder arc 084 D
- [atcoder] agc86 D
- AtCoder Beginner Contest 068 ABC C++&&python
- AtCoder Beginner Contest 069 ABC C++&&Python
- AtCoder Beginner Contest 070 ABC C++&&python
- AtCoder Beginner Contest 073 ABC C++&&Python3
- 1052. Linked List Sorting (25)
- PHP设计模式系列
- Objective-C学习笔记---构造函数和析构函数
- 用浏览器下载(图片/文件)到本地
- mysql在开发中的优化技巧和慢查询日志的配置
- Atcoder ABC 061D Score Attack 最长路+判环
- Objective-C
- MacBook Air 使用技巧
- String.format() 格式化字符串
- 设计模式之策略模式
- android 回调函数一:基本概念
- android 回调函数二:应用实例
- android XMl 解析神奇xstream 一: 解析android项目中 asset 文件夹 下的 aa.xml 文件
- android XMl 解析神奇xstream 二: 把对象转换成xml