Attack's Fond Of LeTri

题意:

  n个房子m条路径边的无向图,每个房子可以最终容纳b个人,初始有a个人,中途超过可以超过b个人,每条边有一个长度,经过一条边的时间花费为边的长度。求所有人都进入房子的最小时间。如果不能容纳所有人,输出最少多少人无法进入房子。

分析:

  注意图不一定联通!!!

  首先Floyd一遍,求出任意两点之间的距离,二分一个答案,然后拆点建二分图,S想每个点连a的容量,另一个点向T连b的容量,对于两个点a,b,如果dis[a][b]<=二分的这个数,就加入一条左边到右边的边,容量为inf。满流即可。

代码:

  1. #include<cstdio>
  2. #include<algorithm>
  3. #include<cstring>
  4. #include<iostream>
  5. #include<cctype>
  6. #include<cmath>
  7. #include<set>
  8. #include<map>
  9. #include<vector>
  10. #include<queue>
  11. #include<bitset>
  12. #define fore(i, u, v) for (int i = head[u], v = e[i].to; i; i = e[i].nxt, v = e[i].to)
  13. using namespace std;
  14. typedef long long LL;
  15.  
  16. inline int read() {
  17. int x=,f=;char ch=getchar();for(;!isdigit(ch);ch=getchar())if(ch=='-')f=-;
  18. for(;isdigit(ch);ch=getchar())x=x*+ch-'';return x*f;
  19. }
  20. const int N = , INF = 1e9;
  21. struct Edge { int to, nxt, cap; } e[];
  22. int head[N], q[], a[N], b[N], dis[N], cur[N];
  23. int En = , S, T, n;
  24. LL d[][], Sum;
  25.  
  26. inline void add_edge(int u,int v,int f) {
  27. ++En; e[En].to = v, e[En].nxt = head[u], e[En].cap = f; head[u] = En;
  28. ++En; e[En].to = u, e[En].nxt = head[v], e[En].cap = ; head[v] = En;
  29. }
  30. bool bfs() {
  31. for (int i = ; i <= T; ++i) dis[i] = -, cur[i] = head[i];
  32. int L = , R = ; q[++R] = S; dis[S] = ;
  33. while (L <= R) {
  34. int u = q[L ++];
  35. fore(i, u, v)
  36. if (dis[v] == - && e[i].cap > ) {
  37. dis[v] = dis[u] + ;
  38. if (v == T) return true;
  39. q[++R] = v;
  40. }
  41. }
  42. return false;
  43. }
  44. int dfs(int u,int flow) {
  45. if (u == T) return flow;
  46. int used = , tmp;
  47. for (int &i = cur[u]; i; i = e[i].nxt) {
  48. int v = e[i].to;
  49. if (dis[v] == dis[u] + && e[i].cap > ) {
  50. tmp = dfs(v, min(e[i].cap, flow - used));
  51. if (tmp > ) {
  52. e[i].cap -= tmp, e[i ^ ].cap += tmp; used += tmp;
  53. if (used == flow) break;
  54. }
  55. }
  56. }
  57. if (flow != used) dis[u] = -;
  58. return used;
  59. }
  60. bool dinic(LL x, bool flag) {
  61. S = , T = n + n + , En = ;
  62. memset(head, , sizeof(head));
  63. for (int i = ; i <= n; ++i) add_edge(S, i, a[i]), add_edge(i + n, T, b[i]);
  64. for (int i = ; i <= n; ++i)
  65. for (int j = ; j <= n; ++j)
  66. if (d[i][j] <= x) add_edge(i, j + n, INF);
  67. LL ans = ;
  68. while (bfs()) ans += dfs(S, INF);
  69. if (flag && ans != Sum) {
  70. cout << "NO\n" << Sum - ans; exit();
  71. }
  72. return ans == Sum;
  73. }
  74. void solve(int m) {
  75. for (int i = ; i <= n; ++i) Sum += a[i];
  76. // memset(d, 0x3f, sizeof(d));
  77. for (int i = ; i <= n; ++i)
  78. for (int j = ; j <= n; ++j) d[i][j] = 1e18;
  79. for (int i = ; i <= n; ++i) d[i][i] = ;
  80. for (int i = ; i <= m; ++i) {
  81. int u = read(), v = read(), w = read();
  82. d[u][v] = min(d[u][v], (LL)w);
  83. d[v][u] = min(d[v][u], (LL)w);
  84. }
  85. for (int k = ; k <= n; ++k)
  86. for (int i = ; i <= n; ++i)
  87. for (int j = ; j <= n; ++j) d[i][j] = min(d[i][j], d[i][k] + d[k][j]);
  88. LL L = 1e18, R = , ans = ;
  89. for (int i = ; i <= n; ++i)
  90. for (int j = ; j <= n; ++j) if (d[i][j] != 1e18) L = min(L, d[i][j]), R = max(R, d[i][j]); // 注意要有dis[i][j]!=1e18???
  91. dinic(R, );
  92. while (L <= R) {
  93. LL mid = (L + R) >> ;
  94. if (dinic(mid, )) R = mid - , ans = mid;
  95. else L = mid + ;
  96. }
  97. cout << "YES\n" << ans << "\n";
  98. }
  99. int main() {
  100. n = read();int m = read();
  101. for (int i = ; i <= n; ++i) a[i] = read(), b[i] = read();
  102. solve(m);
  103. return ;
  104. }

校内模拟赛 Attack's Fond Of LeTri的更多相关文章

  1. 【20170521校内模拟赛】热爱生活的小Z

    学长FallDream所出的模拟赛,个人感觉题目难度还是比较适中的,难度在提高+左右,可能比较接近弱省省选,总体来讲试题考查范围较广,个人认为还是很不错的. 所有试题如无特殊声明,开启-O2优化,时限 ...

  2. Java实现蓝桥杯第十一届校内模拟赛

    有不对的地方欢迎大佬们进行评论(ง •_•)ง 多交流才能进步,互相学习,互相进步 蓝桥杯交流群:99979568 欢迎加入 o( ̄▽ ̄)ブ 有一道题我没写,感觉没有必要写上去就是给你多少MB然后求计 ...

  3. 【20170920校内模拟赛】小Z爱学习

    所有题目开启-O2优化,开大栈空间,评测机效率为4亿左右. T1 小 Z 学数学(math) Description ​ 要说小 Z 最不擅长的学科,那一定就是数学了.这不,他最近正在学习加法运算.老 ...

  4. 校内模拟赛 Zbq's Music Challenge

    Zbq's Music Challenge 题意: 一个长度为n的序列,每个位置可能是1或者0,1的概率是$p_i$.对于一个序列$S$,它的得分是 $$BasicScore=A\times \sum ...

  5. 校内模拟赛 SovietPower Play With Amstar

    SovietPower Play With Amstar 题意: 一棵二叉树,每次询问一条路径上的路径和,初始每个点有一个权值1,询问后权值变为0.$n \leq 10^7,m\leq10^6$ 分析 ...

  6. 校内模拟赛 虫洞(by NiroBC)

    题意: n个点m条边的有向图,每一天每条边存在的概率都是p,在最优策略下,询问从1到n的期望天数. 分析: dijkstra. 每次一定会优先选dp最小的后继走,如果这条边不存在,选次小的,以此类推. ...

  7. 校内模拟赛 旅行(by NiroBC)

    题意: n个点的无向图,Q次操作,每次操作可以连接增加一条边,询问两个点之间有多少条边是必经之路.如果不连通,输出-1. 分析: 首先并查集维护连通性,每次加入一条边后,如果这条边将会连接两个联通块, ...

  8. 校内模拟赛 coin

    题意: n*m的棋盘,每个格子可能是反着的硬币,正着的硬币,没有硬币,每次可以选未选择的一行或者未选择的一列,将这一行/列的硬币取反.如果没有可选的或者硬币已经全部正面,那么游戏结束. 最后一次操作的 ...

  9. 校内模拟赛 Label

    题意: n个点m条边的无向图,有些点有权值,有些没有.边权都为正.给剩下的点标上数字,使得$\sum\limits_{(u,v)\in E}len(u,v) \times (w[u] - w[v]) ...

随机推荐

  1. Expo大作战(三十七)--expo sdk api之 GLView,GestureHandler,Font,Fingerprint,DeviceMotion,Brightness

    简要:本系列文章讲会对expo进行全面的介绍,本人从2017年6月份接触expo以来,对expo的研究断断续续,一路走来将近10个月,废话不多说,接下来你看到内容,讲全部来与官网 我猜去全部机翻+个人 ...

  2. 【转】如何将MySQL数据目录更改为CentOS 7上的新位置

    本文转载自:http://www.leftso.com/blog/362.html 介绍 数据库随着时间的推移而增长,有时超过了文件系统的空间.当它们与操作系统的其他部分位于同一分区上时,也可能遇到I ...

  3. [20180606]如何dump数据库里面的汉字.txt

    [20180606]如何dump数据库里面的汉字.txt --//链接http://www.itpub.net/thread-2102613-1-2.html的问题. 比如:col 41: [42]e ...

  4. SpringBoot整合Rabbitmq设置消息请求头

    String str = "{\"origin\":\"BBC\",\"origin_coupon_id\":51,\" ...

  5. 如何检查oracle的归档日志及空间占用率,清除归档日志

    如何解决“归档日志已满问题” 问题描述: 所用数据库为 Oracle 10g ,模式为归档模式,oracle 系统默认的归档空间为2G,由于日志过多,空间写满,数据库的redo文件不能归档,而出现or ...

  6. validator js验证器

    转自:https://github.com/jaywcjlove/validator.js 轻量级的JavaScript表单验证,字符串验证.没有依赖,支持UMD 导入js库 <script t ...

  7. Java设计模式之二 ----- 工厂模式

    在上一篇中我们学习了单例模式,介绍了单例模式创建的几种方法以及最优的方法.本篇则介绍设计模式中的工厂模式,主要分为简单工厂模式.工厂方法和抽象工厂模式. 简单工厂模式 简单工厂模式是属于创建型模式,又 ...

  8. 第一次安装tomcat报错,出现failed to install tomcat8 service错误

    第一次安装tomcat报错,出现failed to install tomcat8 service错误(0) 一.一般情况下这种错误都是没有卸载干净造成的,安全卸载Tomcat的方法 (转载); ht ...

  9. bootstrap table使用及遇到的问题

    本人前端菜鸟一枚,最近使用bootstrap table实现表格,记录一下以便日后翻阅,废话不多说,先看效果图: 1.首先说下要实现该效果需要添加的css样式及所需的js文件,具体下载地址就不粘贴了( ...

  10. UOJ #390. 【UNR #3】百鸽笼

    UOJ #390. [UNR #3]百鸽笼 题目链接 看这道题之前先看一道相似的题目 [PKUWC2018]猎人杀. 考虑类似的容斥: 我们不妨设处理\(1\)的概率. 我们令集合\(T\)中的所有鸽 ...