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 & ...
随机推荐
- R6010 -abort() has been called错误分析及其解决方法
近期使用vs2010编程出现下面问题.在网上收集了大家的意见之后,整理了一下 导致出现这种原因有: 1.非法指针訪问和内存泄漏 2.大家再查查吧.一定是指针出现故障了.设置的指针范围跟你执行的不正确 ...
- js获取某个标签中的信息
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta http ...
- emacs window版环境配置(设置默认的.emacs文件,指向自定义.emacs达到自定义home的目的)
1.下载解压包 下载地址 ,下载之后我是直接解压到E:\emacs中的,E:\emacs中就有bin,libexec…等文件; 2.点击bin中的addpm.exe文件进行安装emacs; 3.就会 ...
- 一个很经典的this面试题
!function(){ this.length = 10; var fn = function(){ console.log(this.length); //输出多少? }, arr = [fn, ...
- VS 2003 无法打开Web项目,位于服务器“http:10.45.4.70:8080”上的项目不存在
解决方法: 用记事本打开*.sln文件更改第2行 改成正确的虚拟目录 出现这种情况往往是从一台机器搬到另一台机器造成的虚拟路径名字不同
- Unix is 命令
输入正整数n以及n个文件名,排序后按列优先的方式左对齐输出.假设最长文件名有M字符,则最右列有M字符,其他列都是M+2字符. 附加条件每行最多输出60个字符,在此条件下要求行最少. Sample in ...
- Struts1.x下使用jquery的Ajax获取后台数据
jquery中有多种Ajax方法来获取后台数据,我使用的是$.get()方法,具体的理论我不解释太多,要解释也是从别的地方copy过来的.下面就介绍我的项目中的实现方法. 前台页面: ...
- C# 操作系统回收站
主要目的:对系统回收站的文件进行操作. 首先添加引用,引入shell32.dll. /// <summary> /// 对回收站的文件进行还原.删除.剪切等操作 /// </summ ...
- [C++程序设计]返回指针值的函数
定义指针函数的一般形式为 类型名 *函数名(参数表列); 例如 int *a(int x,int y);
- 小插曲之变量和字符串 - 零基础入门学习Python003
小插曲之变量和字符串 让编程改变世界 Change the world by program 变量 (此处只是省略N多细节,详细通过视频学习) 变量名就像我们现实社会的名字,把一个值赋值给一个名字时, ...