E - Andrew and Taxi

思路 :min max   明显二分答案,二分需要破坏的那些边的中机器人数量最多的那个。

check 过程建边时直接忽略掉小于 mid 的边,这样去检验有无环存在即可。 当时有一点担心会出现

有一个环 有一条边 反过来之后 这个环破坏了 却成就了 另一个环,但是画图发现 这样的图 ,它们两边会形成

一个大环。那个大环一定会通过别的边破坏掉,所以不需要担心这种情况。topo 判环即可。

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. #define maxn 1234567
  4. int n,m,head[maxn],ord[maxn],id;
  5. int cnt,u,v,w,in[maxn],l,r,s;
  6. vector<int>p;
  7. struct data
  8. {
  9. int u,v,w;
  10. } e[maxn];
  11. struct node
  12. {
  13. int to,v,w;
  14. } edge[maxn];
  15. void add(int u,int v,int w)
  16. {
  17. edge[++cnt].v=v;
  18. edge[cnt].to=head[u];
  19. edge[cnt].w=w;
  20. head[u]=cnt;
  21. in[v]++;
  22. }
  23. void topo(int x)
  24. {
  25. id=cnt=0;
  26. queue<int>q;
  27. while(!q.empty())q.pop();
  28. for(int i=0; i<=n; i++)
  29. {
  30. head[i]=-1;
  31. ord[i]=in[i]=0;
  32. }
  33. for(int i=0; i<m; i++)
  34. if(e[i].w>x)add(e[i].u,e[i].v,e[i].w);
  35. for(int i=1; i<=n; i++)
  36. {
  37. if(in[i]==0)
  38. {
  39. q.push(i);
  40. ord[i]=++id;
  41. }
  42. }
  43. while(!q.empty())
  44. {
  45. u=q.front();
  46. q.pop();
  47. for(int i=head[u]; i!=-1; i=edge[i].to)
  48. {
  49. v=edge[i].v;
  50. in[v]--;
  51. if(in[v]==0)
  52. {
  53. q.push(v);
  54. ord[v]=++id;
  55. }
  56. }
  57. }
  58. }
  59. bool ok(int x)
  60. {
  61. topo(x);
  62. if(id<n)return false;
  63. return true;
  64. }
  65. int main()
  66. {
  67. scanf("%d%d",&n,&m);
  68. for(int i=0; i<m; i++)
  69. scanf("%d%d%d",&e[i].u,&e[i].v,&e[i].w);
  70. r=1e9;
  71. while(l<=r)
  72. {
  73. int mid=(l+r)/2;
  74. if(ok(mid))r=mid-1;
  75. else l=mid+1;
  76. }
  77. topo(l);
  78. for(int i=0; i<m; i++)
  79. if(ord[e[i].u]>ord[e[i].v])
  80. p.push_back(i+1);
  81. s=p.size();
  82. printf("%d %d \n",l,s);
  83. for(int i=0; i<s; i++)
  84. {
  85. printf("%d",p[i]);
  86. if(i<s)printf(" ");
  87. else printf("\n");
  88. }
  89. return 0;
  90. }

  

E - Andrew and Taxi-二分答案-topo判环的更多相关文章

  1. CF1100E Andrew and Taxi 二分答案+拓扑排序

    \(\color{#0066ff}{ 题目描述 }\) 给定一个有向图,改变其中某些边的方向,它将成为一个有向无环图. 现在求一个改变边方向的方案,使得所选边边权的最大值最小. \(\color{#0 ...

  2. BZOJ 1486: [HNOI2009]最小圈( 二分答案 + dfs判负圈 )

    二分答案m, 然后全部边权减掉m, 假如存在负圈, 那么说明有平均值更小的圈存在. 负圈用dfs判断. ------------------------------------------------ ...

  3. [USACO07DEC]观光奶牛Sightseeing Cows 二分答案+判断负环

    题目描述 Farmer John has decided to reward his cows for their hard work by taking them on a tour of the ...

  4. 【题解】 [HNOI2009] 最小圈 (01分数规划,二分答案,负环)

    题目背景 如果你能提供题面或者题意简述,请直接在讨论区发帖,感谢你的贡献. 题目描述 对于一张有向图,要你求图中最小圈的平均值最小是多少,即若一个圈经过k个节点,那么一个圈的平均值为圈上k条边权的和除 ...

  5. FZU 1924——死锁——————【topo判环】

    死锁 Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Submit Status Pr ...

  6. CF1100E Andrew and Taxi

    题目地址:CF1100E Andrew and Taxi 二分,每次取到一个 \(mid\) ,只保留长度 \(>mid\) 的边 dfs判环,若有环,说明 \(ans>mid\) ,否则 ...

  7. Luogu P1663 山【二分答案/实数域】By cellur925

    题目传送门 现在要在山上的某个部位装一盏灯,使得这座山的任何一个部位都能够被看到. 给出最小的y坐标,如图的+号处就是y坐标最小的安装灯的地方. 这个题嘛...今年省选前学姐来我们(破烂)的机房串门的 ...

  8. CF 1100E Andrew and Taxi(二分答案)

    E. Andrew and Taxi time limit per test 2 seconds memory limit per test 256 megabytes input standard ...

  9. E. Andrew and Taxi(二分+拓扑判环)

    题目链接:http://codeforces.com/contest/1100/problem/E 题目大意:给你n和m,n代表有n个城市,m代表有m条边,然后m行输入三个数,起点,终点,花费.,每一 ...

随机推荐

  1. 金融量化分析【day113】:聚宽自带策略

    一.策略代码 # 导入函数库 from jqdata import * # 初始化函数,设定基准等等 def initialize(context): # 设定沪深300作为基准 set_benchm ...

  2. python django(forms组件)

    forms组件最大的作用,就是做数据校验. 普通做法,一个一个写校验规则,没有解耦.校验规则,都在视图函数里面. 网页校验 修改urls.py,增加路径addbook from app01 impor ...

  3. Entity Framework入门教程(6)--- 在线场景中保存数据

    在线场景中保存数据 在线场景中保存实体数据是一项相当容易的任务,因为使用的是同一个context,这个context会自动跟踪所有实体发生的更改. 下图说明了在线场景中的CUD(创建,更新,删除)操作 ...

  4. 清除Windows访问共享时保存的凭据记录

    场景:某些时候我们连接了某台PC或服务器的共享目录或打印机,但因为一些原因突然连接不上了(或是对方组策略发生变化,或是对方计算机用户密码变更 等等..) 又或者电脑给其它用户使用,因一些安全问题需要临 ...

  5. MyBatis联表查询

    MyBatis逆向工程主要用于单表操作,那么需要进行联表操作时,往往需要我们自己去写sql语句. 写sql语句之前,我们先修改一下实体类 Course.java: public class Cours ...

  6. [笔记]猿计划(WEB安全工程师养成之路系列教程):02HTML头部标签

    1.什么是HTML? HTML是用来描述网页的一种语言 HTML——超文本标记语言(Hyper Text Markup Language) HTML不是编程语言,是一种标记语言 标记语言是一套标记标签 ...

  7. Web从入门到放弃<2>

    <添加debug-toolbar> django现在1.11是必须这么做: pip install django-debug-toolbar 设置1: INSTALLED_APPS = [ ...

  8. k64 datasheet学习笔记21--Direct Memory Access Multiplexer (DMAMUX)

    0.前言 本章主要介绍DMA MUX的相关内容 1.简介 1.1 概述 用来路由DMA源到16路DMA通道: 1.2 特性 1.52个外设slot和10个常开slot可以路由到16路DMA通道 2.1 ...

  9. ActiveMQ依赖JDK版本关系

    1.如何查看官方发布的activeMQ依赖的JDK版本1)以ActiveMQ 5.15.2 Release为例:在下载页面的Change Log处, 2)打开下载号的jar包,以activemq-al ...

  10. Python--可迭代对象,迭代器,生成器

    记得在刚开始学Python的时候,看到可迭代对象(iterable).迭代器(iterator)和生成器(generator)这三个名词时,完全懵逼了,根本就不知道是啥意识.现在以自己的理解来详解下这 ...