codeforces567E. President and Roads
题目大意:总统要回家,会经过一些街道,每条街道都是单向的并且拥有权值。现在,为了让总统更好的回家,要对每一条街道进行操作:1)如果该街道一定在最短路上,则输出“YES”。2)如果该街道修理过后,该边所在的最短路可以取代原先的最短路,则输出“CAN x”,x是修改该街道的花费,就是权值减小的值。3)如果该街道是一条不连通的街道,或者修改过后权值小于等于0,则输出“NO”。
解题思路:正向取边,求一次最短路得到d1[], 然后反向取边,再求一次最短路得到d2[]。接着开始判断每一条边是否在最短路上。初始最短路为Min,当d1[u]+d2[v]+dis==Min时,先判断该边是否一定为最短路上的边,是的话输出“YES”,否则在判断该边的权值是否大于1,是的话输出“CAN 1”,否则输出“NO”。当d1[u]+d2[v]+dis>Min时,先判断两段路的差值加一是否会大于等于该边的差值,是的话,输出“NO”,否则输出“CAN 差值加一”,其余情况均输出“NO”。还有一个问题,如何判断边是否一定在最短路上。先把最短路取出,重新建一张无向图,然后用tarjan算法求出哪些边是桥。桥就是一定在最短路上的边。
#include<cstdio>
#include<iostream>
#include<cmath>
#include<cstring>
#include<algorithm>
#define maxn 200005
#define maxm 200005
#define inf 4557430888798830399LL
using namespace std;
typedef long long int64;
char ch;
int n,m,s,t,a[maxm],b[maxm],idx,dfn[maxn],low[maxn];
int64 c[maxm],min_road;
int siz,pos[maxn];
struct Heap{
int64 val;
int num;
bool operator <(const Heap b)const{return val<b.val;}
bool operator >(const Heap b)const{return b<*this;}
bool operator <=(const Heap b)const{return !(*this>b);}
bool operator >=(const Heap b)const{return !(*this<b);}
bool operator ==(const Heap b)const{return (*this<=b)&&(*this>=b);}
bool operator !=(const Heap b)const{return !(*this==b);}
}heap[maxn],tmp;
struct Map{
int tot,now[maxn],son[maxm],pre[maxm],val[maxm];
int64 dist[maxn];
void put(int a,int b,int c){pre[++tot]=now[a],now[a]=tot,son[tot]=b,val[tot]=c;}
}map[];
bool ok,bo[maxn],road[maxm];
void read(int &x){
for (ok=,ch=getchar();!isdigit(ch);ch=getchar()) if (ch=='-') ok=;
for (x=;isdigit(ch);x=x*+ch-'',ch=getchar());
if (ok) x=-x;
}
void read(int64 &x){
for (ok=,ch=getchar();!isdigit(ch);ch=getchar()) if (ch=='-') ok=;
for (x=;isdigit(ch);x=x*+ch-'',ch=getchar());
if (ok) x=-x;
}
void heap_swap(Heap &a,Heap &b){swap(pos[a.num],pos[b.num]),swap(a,b);}
void up(int son){
int fa=son>>;
while (fa){
if (heap[fa]<=heap[son]) break;
heap_swap(heap[fa],heap[son]);
son=fa,fa>>=;
}
}
void down(){
int fa=,son=fa<<;
while (son<=siz){
if (son+<=siz&&heap[son+]<heap[son]) son++;
if (heap[fa]<=heap[son]) break;
heap_swap(heap[fa],heap[son]);
fa=son,son<<=;
}
}
void dijkstra(Map &map,int s){
siz=n;
memset(map.dist,,sizeof(map.dist));
memset(bo,,sizeof(bo));
for (int i=;i<=n;i++) heap[i].val=inf;
for (int i=;i<=n;i++) heap[i].num=i;
for (int i=;i<=n;i++) pos[i]=i;
heap[s].val=,up(pos[s]);
for (;;){
if (heap[].val==inf||!siz) break;
int u=heap[].num;
bo[u]=true,map.dist[u]=heap[].val;
heap_swap(heap[],heap[siz--]),down();
for (int p=map.now[u],v=map.son[p];p;p=map.pre[p],v=map.son[p]){
if (heap[pos[v]].val>map.dist[u]+map.val[p]&&!bo[v])
heap[pos[v]].val=map.dist[u]+map.val[p],up(pos[v]);
}
}
}
void dfs(Map &map,int u,int t){
dfn[u]=low[u]=++idx;
for (int p=map.now[u],v=map.son[p];p;p=map.pre[p],v=map.son[p])
if (!dfn[v]){
dfs(map,v,p^),low[u]=min(low[u],low[v]);
if (low[v]>dfn[u]) road[pos[p>>]]=;
}
else if (t!=p) low[u]=min(low[u],dfn[v]);
}
int main(){
read(n),read(m),read(s),read(t);
for (int i=;i<=m;i++) read(a[i]),read(b[i]),read(c[i]),map[].put(a[i],b[i],c[i]),map[].put(b[i],a[i],c[i]);
dijkstra(map[],s),dijkstra(map[],t),min_road=map[].dist[t],map[].tot=;
for (int i=;i<=m;i++) if (map[].dist[a[i]]+map[].dist[b[i]]+c[i]==min_road)
map[].put(a[i],b[i],c[i]),map[].put(b[i],a[i],c[i]),pos[map[].tot>>]=i;//,cout<<a[i]<<' '<<b[i]<<endl;
dfs(map[],s,-);
for (int i=;i<=m;i++)
if (map[].dist[a[i]]+map[].dist[b[i]]+c[i]==min_road){
if (road[i]) puts("YES");
else if (c[i]>) puts("CAN 1");
else puts("NO");
}
else if (map[].dist[a[i]]+map[].dist[b[i]]+c[i]>min_road){
if (min_road>map[].dist[a[i]]+map[].dist[b[i]]+) printf("CAN %I64d\n",map[].dist[a[i]]+map[].dist[b[i]]+c[i]-min_road+);
else puts("NO");
}
else puts("NO");
return ;
}
codeforces567E. President and Roads的更多相关文章
- Codeforces Round #Pi (Div. 2) E. President and Roads tarjan+最短路
E. President and RoadsTime Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/567 ...
- 【CodeForces 567E】President and Roads(最短路)
Description Berland has n cities, the capital is located in city s, and the historic home town of th ...
- Codeforces Round #Pi (Div. 2) E. President and Roads 最短路+桥
题目链接: http://codeforces.com/contest/567/problem/E 题意: 给你一个带重边的图,求三类边: 在最短路构成的DAG图中,哪些边是必须经过的: 其他的(包括 ...
- Codeforces.567E.President and Roads(最短路 Dijkstra)
题目链接 \(Description\) 给定一张有向图,求哪些边一定在最短路上.对于不一定在最短路上的边,输出最少需要将其边权改变多少,才能使其一定在最短路上(边权必须为正,若仍不行输出NO). \ ...
- cf567E. President and Roads(最短路计数)
题意 题目链接 给出一张有向图,以及起点终点,判断每条边的状态: 是否一定在最短路上,是的话输出'YES' 如果不在最短路上,最少减去多少权值会使其在最短路上,如果减去后的权值\(< 1\),输 ...
- CF567E President and Roads
\(\color{#0066ff}{ 题目描述 }\) 给出一个有向图,从起点走到终点(必须走最短路),问一条边是否一定会被经过,如果不经过它,可以减小它的多少边权使得经过它(边权不能减少到0) \( ...
- Codeforces Round #Pi (Div. 2) 567E President and Roads ( dfs and similar, graphs, hashing, shortest paths )
图给得很良心,一个s到t的有向图,权值至少为1,求出最短路,如果是一定经过的边,输出"YES",如果可以通过修改权值,保证一定经过这条边,输出"CAN",并且输 ...
- codeforces 567 E. President and Roads 【 最短路 桥 】
给出一个有向图,从起点走到终点(必须走最短路),问一条边是否一定会被经过,如果不经过它,可以减小它的多少边权使得经过它(边权不能减少到0) 正反向建图,分别求出起点到每个点的最短距离,终点到每个点的最 ...
- 【Henu ACM Round#14 F】 President and Roads
[链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 处理出起点到任意点的最短路以及最短路条数=>dis[0][i],cnt[0][i] 然后 把所有的边反向 处理出在反图上终点到 ...
随机推荐
- linux —— 学习笔记(汇总)
笔记目录:一.系统知识 和 基本概念 二.常用操作 三.系统管理(内存.设备.服务等管理) ...
- BIGINT UNSIGNED value is out of range in … 问题的解决方法
问题出现在CAST(value AS USIGNED)将字符串转换成数值的过程中,出现这个问题的原因是value对应的数值在BIGINT UNSIGNED 的范围内.可能的情况是value的值太大,超 ...
- 3DS MAX 导出FBX到Unity3D设置
- Codeforces 544E Remembering Strings 状压dp
题目链接 题意: 给定n个长度均为m的字符串 以下n行给出字符串 以下n*m的矩阵表示把相应的字母改动成其它字母的花费. 问: 对于一个字符串,若它是easy to remembering 当 它存在 ...
- PHP安全编程:更优的会话数据安全 更好地防范session暴露(转)
当你关注于防止源码的暴露时,你的会话数据只同样存在着风险.在默认情况下,SESSION保存在/tmp目录下.这样做在很多情形下是很方便的,其中之一是所有用户都有对/tmp的写入权限,这样Apache同 ...
- iOS 下的相册与图片处理
需求 很多公司项目中都会使用到相册,以及相机,保存图片,从相册中选取图片等等操作.本文将详细介绍该功能如何实现优化,以及使用一些优秀的第三方库来辅助完成我们的需求. photos framework ...
- python实现登录函数,比较简单
一个简单的python实现登录以及修改密码的函数 #密码错误3次,锁定登录: password_list = ['] def account_login(): Tries = 3 while Trie ...
- JSON 遍历转为Model Bean
@RequestMapping(value = "/batchAddPageIndexBrand") @ResponseBody public HashMap<String, ...
- css控制文字长度,超出长度显示...
css控制文字长度,超出长度显示... .style { max-width: 165px; overflow: hidden; white-space: nowrap; text-overflow: ...
- TSQL Challenge 2
和之前发布的TSQL Challenge 1是同一系列的文章,看到那篇学习哪篇,没有固定的顺序,只为锻炼下思维. Compare rows in the same table and group th ...