Codevs1992题解
题目大意
求有向图中经过某一点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;
}
Codevs1992题解的更多相关文章
- 2016 华南师大ACM校赛 SCNUCPC 非官方题解
我要举报本次校赛出题人的消极出题!!! 官方题解请戳:http://3.scnuacm2015.sinaapp.com/?p=89(其实就是一堆代码没有题解) A. 树链剖分数据结构板题 题目大意:我 ...
- noip2016十连测题解
以下代码为了阅读方便,省去以下头文件: #include <iostream> #include <stdio.h> #include <math.h> #incl ...
- BZOJ-2561-最小生成树 题解(最小割)
2561: 最小生成树(题解) Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 1628 Solved: 786 传送门:http://www.lyd ...
- Codeforces Round #353 (Div. 2) ABCDE 题解 python
Problems # Name A Infinite Sequence standard input/output 1 s, 256 MB x3509 B Restoring P ...
- 哈尔滨理工大学ACM全国邀请赛(网络同步赛)题解
题目链接 提交连接:http://acm-software.hrbust.edu.cn/problemset.php?page=5 1470-1482 只做出来四道比较水的题目,还需要加强中等题的训练 ...
- 2016ACM青岛区域赛题解
A.Relic Discovery_hdu5982 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Jav ...
- poj1399 hoj1037 Direct Visibility 题解 (宽搜)
http://poj.org/problem?id=1399 http://acm.hit.edu.cn/hoj/problem/view?id=1037 题意: 在一个最多200*200的minec ...
- 网络流n题 题解
学会了网络流,就经常闲的没事儿刷网络流--于是乎来一发题解. 1. COGS2093 花园的守护之神 题意:给定一个带权无向图,问至少删除多少条边才能使得s-t最短路的长度变长. 用Dijkstra或 ...
- CF100965C题解..
求方程 \[ \begin{array}\\ \sum_{i=1}^n x_i & \equiv & a_1 \pmod{p} \\ \sum_{i=1}^n x_i^2 & ...
随机推荐
- mvc初学controller参数传递感想
从视图中传递参数给controller也有很多种方式 方法一(推荐):路由 config.Routes.MapHttpRoute( name: "DefaultApi", rout ...
- 编程算法 - 圆圈中最后剩下的数字(递推公式) 代码(C++)
圆圈中最后剩下的数字(递推公式) 代码(C++) 本文地址: http://blog.csdn.net/caroline_wendy 题目: 0,1...,n-1这n个数字排成一个圆圈, 从数字0開始 ...
- Android加载图片OOM错误解决方式
前几天做项目的时候,甲方要求是PAD (SAMSUNG P600 10.1寸 2560*1600)的PAD上显示高分辨率的大图片. SQLITE採用BOLD方式存储图片,这个存取过程就不说了哈,网上一 ...
- NET基础课--对象的筛选和排序(NET之美)
1.数据量不大的时候取出数据缓存于服务器,然后排序,筛选等基于缓存进行以提高效率. 排序或筛选的方法是使用集合类型提供的,如List<T>.sort() List<T>.Fi ...
- JQuery 之事件中的 ----- hover 与 onmouseover 、onmouseout 联系
hover([over,]out) 一个模仿悬停事件(鼠标移动到一个对象上面及移出这个对象)的方法.这是一个自定义的方法,它为频繁使用的任务提供了一种“保持在其中”的状态. 当鼠标移动到一个匹配的元素 ...
- 基础命名空间:反射 using System.Reflection
反射概念: .Net的应用程序由几个部分:‘程序集(Assembly)’.‘模块(Module)’.‘类型(class)’组成,程序集包含模块 模块包含类型,类型又包含 成员,而反射提供一 ...
- Asp.net文件缓存依赖
Asp.net文件缓存依赖 using System; using System.Collections.Generic; using System.Linq; using System.Web; u ...
- JOSN的stringify()和parse()方法
JOSN的stringify()和parse()方法使用,stringify()把对象序列化,parse()把JSON字符串解析为js对象 <script> var book = { ti ...
- [c language] getopt
getopt(分析命令行参数) 相关函数表头文件 #include<unistd.h>定义函数 int getopt(int argc,char * ...
- zend framework 初识
1. 请求顺序 : index.php --> Bootstrap.php --> IndexController.php 2. 验证顺序 : Bootstrap.php function ...