CF-567F(President and Roads)

题目链接

题意

S−>ES->ES−>E的DAGDAGDAG中求:

  1. DAGDAGDAG中必经边输出"YESYESYES"

  2. DAGDAGDAG中非必经边求这条边最少降低多少可以使这条边变成必经边

思路

判断必经边可以用方案数判断,对于一条边{u,v}\{u,v\}{u,v},如果way[u]∗rway[v]==way[E]way[u] * rway[v] == way[E]way[u]∗rway[v]==way[E]则该边为必经边.

这题modmodmod = 1e9+7会被卡…

modmodmod = 258280327, 1610612741可以用,或者取两次模

#include <bits/stdc++.h>
const int maxn = 1e5 + 5;
const long long inf = 1e18;
const int mod = 258280327;
using namespace std;
struct ac{long long v, c, id;bool operator < (const ac &t) const{return t.c < c;}
};
vector<ac> g[maxn], rg[maxn];
long long dis[maxn], rdis[maxn], vis[maxn], way[maxn], rway[maxn], ans[maxn];
void Dijkstra(int s, int e, long long* dis, long long* way, vector<ac> *edge) {fill(dis, dis+maxn, inf);fill(vis, vis+maxn, 0);dis[s] = 0;way[s] = 1;priority_queue<ac> que;que.push({s, 0});while (!que.empty()) {ac f = que.top();que.pop();int u = f.v;if (dis[u] < f.c || vis[u]) continue;vis[u] = 1;for (auto it : edge[u]) {int v = it.v;long long c = f.c + it.c;if (dis[v] > c) {dis[v] = c;way[v] = way[u];que.push({v, c});}else if (dis[v] == c) (way[v] += way[u]) %= mod;}}
}
int main() {int n, m, s, e;scanf("%d %d %d %d", &n, &m, &s, &e);for (int i = 0, u,v,c; i < m; ++i) {scanf("%d %d %d", &u, &v, &c);g[u].push_back({v, c, i});rg[v].push_back({u, c, i});}Dijkstra(s, e, dis, way, g);Dijkstra(e, s, rdis, rway, rg);for (int i = 1; i <= n; ++i) {for (auto it : g[i]) {int v = it.v;int c = it.c;long long tmp = c + dis[i] + rdis[v] - dis[e] + 1;if (dis[i] + c + rdis[v] == dis[e] && (way[i] * rway[v]) % mod == way[e]) ans[it.id] = -1;else if (tmp < c) ans[it.id] = tmp;else ans[it.id] = -2;}}for (int i = 0; i < m; ++i) {if (ans[i] == -1) puts("YES");else if (ans[i] == -2) puts("NO");else printf("CAN %lld\n", ans[i]);}return 0;
}

CF-567F(President and Roads) DAG必经边相关推荐

  1. 2019.11.2图论专题(AtCoder Splatter Painting、President and Roads、Shortest Cycle、ISlands II)

    D:AtCoder Grand Contest 012 Splatter Painting 题目描述 Squid喜欢在图中为一些顶点染色(毕竟是鱿鱼 ) 现在有一张由 N 个顶点和 M 条边组成的简单 ...

  2. Gym - 101986F Pizza Delivery(最短路+DAG必经边)

    题目链接:点击查看 题目大意:给出一个n个点m条边的有向无环图,每条边的权重为w,起点为1,终点为2,现在对每一条边询问: 若将该边的方向取反,权值不变,则对最短路有无影响,分为三种情况讨论: 若最短 ...

  3. CF567E President and Roads

    \(\color{#0066ff}{ 题目描述 }\) 给出一个有向图,从起点走到终点(必须走最短路),问一条边是否一定会被经过,如果不经过它,可以减小它的多少边权使得经过它(边权不能减少到0) \( ...

  4. Codeforces 图论板刷总结(更新中)

    图论太菜了呀,那怎么办呀,刷点题吧,写下来可以以后复习?或者造福后人?这blog估计也没什么用? 大概就从这开始刷吧:Link 简单题解 786B 区间图最段路 741C 构造题 二分图 567E 最 ...

  5. ACM图论+数据结构杂题总结

    ACM:图论+数据结构杂题总结 T1: 题目描述:(出处:Atcoder Regular Contest 067 Yakiniku Restaurants) 一条街上有N家烧烤餐馆.餐厅从西到东编号为 ...

  6. 训练3.21(CF 543B Destroying Roads)

    训练3.21(CF543B Destroying Roads) 题目:http://codeforces.com/problemset/problem/543/B 题意:有n点m边(n<3000 ...

  7. NOIp系列题目及CF小结

    长期更新中2333 2018/7/2 先看一下昨晚的cf Codeforces Round #493 (Div. 2) A. Balloons 这个题...直接模拟233 B. Cutting 来一下 ...

  8. CF/TC 做题计划

    因为智商太低了所以决定靠做多一点题来拯救一下自己... 欢迎催更...尽量保持一天2~3题...? 3.15 突然颓废了....怎么办啊QAQAQAQ 3.20 做点easy或者medium冷静一下. ...

  9. CF Gym 100227 I题 题解

    这场Gym全名是这个:2013-2014 CT S01E01: Extended 2000 ACM-ICPC East Central North America Regional Contest ( ...

最新文章

  1. 方舟服务器如何修改恐龙,方块方舟人物及驯养恐龙属性修改教程 人物属性怎么修改_游侠网...
  2. 阿里云配置负载均衡实例
  3. python字符串截取_Python容器类型公共方法汇总
  4. 计算机微机原理及接口技术实训室,《微机原理与接口技术》课程实验报告.doc...
  5. 算法:把数组排成最小的数
  6. HttpClient Util 工具
  7. Vue学习之路第三篇:插值表达式和v-text的区别
  8. 人生哲理枕边书——你应该知道的165个人生哲理
  9. c语言万年历完整源代码,C语言万年历的源程序
  10. unity3d:粒子随摄像机远近有大小变化bug
  11. 40个科研学术网站,收藏必备,予取予求!
  12. 试图通俗地讲一下庞加莱猜想是怎么回事
  13. 4人抢答器----基于Step MAX10小脚丫开发板
  14. 使用python制作世界地图
  15. 华信短信视频开源平台搭建攻略(之三完结易错篇)
  16. 数学建模竞赛常用软件培训2
  17. java图片加气泡文字,动态图片加气泡文字 微信动态图片加文字教程
  18. 联想拯救者Y7000P键盘失灵
  19. 良精商城网店购物系统
  20. 旭元数艺:科技创新引领文化潮流

热门文章

  1. bash: /opt/hisi-linux/x86-arm/arm-hisiv300-linux/target/bin/arm-hisiv300-linux-gcc: 没有那个文件或目录。...
  2. Python3学习笔记(2)——递归函数
  3. HDOJ 1465 不容易系列之一 【错排公式 递推】
  4. Oracle 表数据去重
  5. 2019年总结:把能努力的都努力好,最终等待命运垂青
  6. C# 网络编程之通过ip地址获取地理位置(补充)
  7. 1.1 什么是Hive
  8. 《数据库原理与应用》(第三版)第13章 安全管理 基础 习题参考答案
  9. 大数据WEB阶段 (十)Response、ServletConfig、ServletContext、资源跳转三种方式
  10. 关于VS2017中fopen、fscanf等函数无法使用的问题