E - Andrew and Taxi-二分答案-topo判环
思路 :min max 明显二分答案,二分需要破坏的那些边的中机器人数量最多的那个。
check 过程建边时直接忽略掉小于 mid 的边,这样去检验有无环存在即可。 当时有一点担心会出现
有一个环 有一条边 反过来之后 这个环破坏了 却成就了 另一个环,但是画图发现 这样的图 ,它们两边会形成
一个大环。那个大环一定会通过别的边破坏掉,所以不需要担心这种情况。topo 判环即可。
#include<bits/stdc++.h>
using namespace std;
#define maxn 1234567
int n,m,head[maxn],ord[maxn],id;
int cnt,u,v,w,in[maxn],l,r,s;
vector<int>p;
struct data
{
int u,v,w;
} e[maxn];
struct node
{
int to,v,w;
} edge[maxn];
void add(int u,int v,int w)
{
edge[++cnt].v=v;
edge[cnt].to=head[u];
edge[cnt].w=w;
head[u]=cnt;
in[v]++;
}
void topo(int x)
{
id=cnt=0;
queue<int>q;
while(!q.empty())q.pop();
for(int i=0; i<=n; i++)
{
head[i]=-1;
ord[i]=in[i]=0;
}
for(int i=0; i<m; i++)
if(e[i].w>x)add(e[i].u,e[i].v,e[i].w);
for(int i=1; i<=n; i++)
{
if(in[i]==0)
{
q.push(i);
ord[i]=++id;
}
}
while(!q.empty())
{
u=q.front();
q.pop();
for(int i=head[u]; i!=-1; i=edge[i].to)
{
v=edge[i].v;
in[v]--;
if(in[v]==0)
{
q.push(v);
ord[v]=++id;
}
}
}
}
bool ok(int x)
{
topo(x);
if(id<n)return false;
return true;
}
int main()
{
scanf("%d%d",&n,&m);
for(int i=0; i<m; i++)
scanf("%d%d%d",&e[i].u,&e[i].v,&e[i].w);
r=1e9;
while(l<=r)
{
int mid=(l+r)/2;
if(ok(mid))r=mid-1;
else l=mid+1;
}
topo(l);
for(int i=0; i<m; i++)
if(ord[e[i].u]>ord[e[i].v])
p.push_back(i+1);
s=p.size();
printf("%d %d \n",l,s);
for(int i=0; i<s; i++)
{
printf("%d",p[i]);
if(i<s)printf(" ");
else printf("\n");
}
return 0;
}
E - Andrew and Taxi-二分答案-topo判环的更多相关文章
- CF1100E Andrew and Taxi 二分答案+拓扑排序
\(\color{#0066ff}{ 题目描述 }\) 给定一个有向图,改变其中某些边的方向,它将成为一个有向无环图. 现在求一个改变边方向的方案,使得所选边边权的最大值最小. \(\color{#0 ...
- BZOJ 1486: [HNOI2009]最小圈( 二分答案 + dfs判负圈 )
二分答案m, 然后全部边权减掉m, 假如存在负圈, 那么说明有平均值更小的圈存在. 负圈用dfs判断. ------------------------------------------------ ...
- [USACO07DEC]观光奶牛Sightseeing Cows 二分答案+判断负环
题目描述 Farmer John has decided to reward his cows for their hard work by taking them on a tour of the ...
- 【题解】 [HNOI2009] 最小圈 (01分数规划,二分答案,负环)
题目背景 如果你能提供题面或者题意简述,请直接在讨论区发帖,感谢你的贡献. 题目描述 对于一张有向图,要你求图中最小圈的平均值最小是多少,即若一个圈经过k个节点,那么一个圈的平均值为圈上k条边权的和除 ...
- FZU 1924——死锁——————【topo判环】
死锁 Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Submit Status Pr ...
- CF1100E Andrew and Taxi
题目地址:CF1100E Andrew and Taxi 二分,每次取到一个 \(mid\) ,只保留长度 \(>mid\) 的边 dfs判环,若有环,说明 \(ans>mid\) ,否则 ...
- Luogu P1663 山【二分答案/实数域】By cellur925
题目传送门 现在要在山上的某个部位装一盏灯,使得这座山的任何一个部位都能够被看到. 给出最小的y坐标,如图的+号处就是y坐标最小的安装灯的地方. 这个题嘛...今年省选前学姐来我们(破烂)的机房串门的 ...
- CF 1100E Andrew and Taxi(二分答案)
E. Andrew and Taxi time limit per test 2 seconds memory limit per test 256 megabytes input standard ...
- E. Andrew and Taxi(二分+拓扑判环)
题目链接:http://codeforces.com/contest/1100/problem/E 题目大意:给你n和m,n代表有n个城市,m代表有m条边,然后m行输入三个数,起点,终点,花费.,每一 ...
随机推荐
- docker的基础命令
详细命令参考http://www.runoob.com/docker/docker-command-manual.html
- es6常用的
常用: let关键字: 1. 作用: * 与var类似, 用于声明一个变量2. 特点: * 在块作用域内有效 * 不能重复声明 * 不会预处理, 不存在提升3. 应用: * 循环遍历加监听 * 使用l ...
- Go语言系列(八)- Goroute和Channel
一.Goroute 1. 进程和线程 A. 进程是程序在操作系统中的一次执行过程,系统进行资源分配合调度的一个独立单位 B. 线程是进程的一个执行实体,是CPU调度和分派的基本单位,它是比进程更小的能 ...
- 第四节:IO、序列化和反序列化、加密解密技术
一. IO读写 这里主要包括文件的读.写.移动.复制.删除.文件夹的创建.文件夹的删除等常规操作. 注意:这里需要特别注意,对于普通的控制台程序和Web程序,将"相对路径"转换成& ...
- 第十六节:语法总结(3)(C#6.0和C#7.0新语法)
一. C# 6.0 新语法 1. 自动属性初始化可以赋值 /// <summary> /// 自动属性初始化 /// </summary> public class UserI ...
- [物理学与PDEs]第2章第3节 Navier-Stokes 方程组
1. 当流体的压力 $p$ 及温度 $T$ 改变时, 密度 $\rho$ 变化很小. 此时可近似地把流体看作是不可压的, 而 $\rho=\const$. 如此, 流体动力学方程组中的质量.动量守恒 ...
- git中利用rebase来压缩多次提交 ----- 原文:https://blog.csdn.net/itfootball/article/details/44154121
之前我们用git merge –squash来将分支中多次提交合并到master后,只保留一次提交历史.但是有些提交到github远程仓库中的commit信息如何合并呢? 使用下面的命令,最后一个数字 ...
- L1-Day3
L1-Day31.太阳从西边落下. [我的翻译]The sun falls in the west. [标准答案]The sun sets in the west. [对比分析]落下fall与set的 ...
- Revit手工创建族(转)
http://www.cnblogs.com/greatverve/p/revit-family.html 手工创建族 1.画两个参考平面. 图3001 2.点击族类型,添加参数. 图3002,300 ...
- Copley-STM32串口+CANopen实现双电机力矩同步
原来有个CANopen的主站卡,现在没了,只有单片机,用单片机来制作一个CANopen的主站卡貌似不是很难,但是需要时间.无奈仔细看了一个Copley的说明,决定采用CAN口+串口来实现之前的功能. ...