Codevs1992题解
来源:互联网 发布:软件测试培训学费 编辑:程序博客网 时间:2024/06/12 00:10
题目大意
求有向图中经过某一点k的最大环(数据规模不支持floyd)。题解
以k为起点在正向图中spfa求单源最短路,再在反向图中spfa求单源最短路。枚举除k外的每一个点i,如果有一个同时包含i与k的环,ans=max{ans,dist[i]+invdist[i]} 。Code
#include <cstdio>#include <cstring>#include <queue>#include <algorithm>using namespace std;const int maxn = 1010, maxm = 200010, nil = 0, oo = 1061109567;int n, m, k;int pnt[maxn], nxt[maxm], u[maxm], v[maxm], w[maxm], e;int d[maxn], invd[maxn];bool vis[maxn], other[maxm];void addedge(int x, int y, int z){ u[++e] = x; v[e] = y; w[e] = z; nxt[e] = pnt[x]; pnt[x] = e; other[e] = false; u[++e] = y; v[e] = x; w[e] = z; nxt[e] = pnt[y]; pnt[y] = e; other[e] = true;}void init(){ int x, y, z; scanf("%d%d%d", &n, &m, &k); for(int i = 1; i <= m; ++i) { scanf("%d%d%d", &x, &y, &z); addedge(x, y, z); }}void work(){ queue <int> q; //以下为反向spfa memset(invd, 0x3f, sizeof(invd)); memset(vis, 0, sizeof(vis)); invd[k] = 0; vis[k] = true; q.push(k); while(!q.empty()) { int tmp = q.front(); q.pop(); vis[tmp] = false; for(int j = pnt[tmp]; j != nil; j = nxt[j]) { if(other[j] && invd[v[j]] > invd[tmp] + w[j]) { invd[v[j]] = invd[tmp] + w[j]; vis[v[j]] = true; q.push(v[j]); } } } //以下为正向spfa memset(d, 0x3f, sizeof(d)); memset(vis, 0, sizeof(vis)); d[k] = 0; vis[k] = true; q.push(k); while(!q.empty()) { int tmp = q.front(); q.pop(); vis[tmp] = false; for(int j = pnt[tmp]; j != nil; j = nxt[j]) { if((!other[j]) && d[v[j]] > d[tmp] + w[j]) { d[v[j]] = d[tmp] + w[j]; vis[v[j]] = true; q.push(v[j]); } } } int ans = 0; for(int i = 1; i <= n; ++i) { if(d[i] != oo && invd[i] != oo) { ans = max(ans, d[i] + invd[i]); } } printf("%d\n", ans);}int main(){ init(); work(); return 0;}
0 0
- Codevs1992题解
- 题解
- 题解
- 题解
- 题解
- 题解
- 题解
- 题解
- 题解
- 题解
- 题解
- 题解
- 题解~~~~
- 题解。。。。
- 题解
- 题解
- 1002 题解
- pku1001题解
- java实现串口配置之运行环境搭建
- Java学习笔记04 俄罗斯方块的界面切换
- 笔试题 百度2015大数据云计算研发笔试(非相邻数最大和)
- 转x电容和y电容的区别
- 后台偷发短信
- Codevs1992题解
- test
- Eclipse for Mac 配置JDK1.8
- 从vivado 2013.4到vivado 2015.2的搬迁笔记
- 人群拥挤检测之人数检测二
- lua内存优化
- 错用return语句引起的内存泄露
- Discuz 论坛设置发帖最大字数
- Android APK反编译就这么简单 详解(附图)