CF1100E
i207M给的题
给定一张有向图,每条边有边权。你可以花费边权的代价反转一条边,使得原图中没有环。最小化反转的边权的最大值。
首先二分,然后考虑判定。
转化为有些边可以翻转,有些边不可以翻转,使得图中没有环
我们把不能反向的边拿出来,然后跑拓扑排序判环,如果有环则无解,不然一定有一种方案,加入那些可以改变方向的边而不产生环。
新加的边方向:拓扑序小的连向拓扑序大的
有环一定是大的拓扑序连向小的拓扑序有一条边
而这样是一定没有环的!
#include<bits/stdc++.h>
#define reg register int
#define il inline
#define numb (ch^'0')
using namespace std;
typedef long long ll;
il void rd(int &x){
char ch;x=;bool fl=false;
while(!isdigit(ch=getchar()))(ch=='-')&&(fl=true);
for(x=numb;isdigit(ch=getchar());x=x*+numb);
(fl==true)&&(x=-x);
}
namespace Miracle{
const int N=+;
int n,m;
struct edge{
int x,y,z;
}b[N];
struct node{
int nxt,to;
}e[*N];
int hd[N],cnt;
void add(int x,int y){
e[++cnt].nxt=hd[x];
e[cnt].to=y;
hd[x]=cnt;
}
int dfn[N],df;
int q[N],l,r;
int du[N];
int mem[N],tot;
bool topo(){
memset(dfn,,sizeof dfn);
l=,r=;
df=;
for(reg i=;i<=n;++i){
if(du[i]==){
q[++r]=i;
dfn[i]=++df;
}
}
while(l<=r){
int x=q[l++];
for(reg i=hd[x];i;i=e[i].nxt){
int y=e[i].to;
du[y]--;
if(!du[y]){
dfn[y]=++df;
q[++r]=y;
}
}
}
for(reg i=;i<=n;++i){
if(!dfn[i]) return false;
}
return true;
}
bool che(int mid){
memset(du,,sizeof du);
memset(hd,,sizeof hd);
cnt=;
for(reg i=;i<=m;++i){
if(b[i].z>mid){
add(b[i].x,b[i].y);
++du[b[i].y];
}
}
return topo();
}
int main(){
rd(n);rd(m);
int x,y,z;
int L=,R=;
for(reg i=;i<=m;++i){
rd(x);rd(y);rd(z);R=max(R,z);
b[i].x=x;b[i].y=y;b[i].z=z;
}
int ans=;
while(L<=R){
int mid=(L+R)>>;
if(che(mid)){
ans=mid;R=mid-;
}else L=mid+;
}
printf("%d ",ans);
bool haha=che(ans);
for(reg i=;i<=m;++i){
if(dfn[b[i].x]>dfn[b[i].y]){
mem[++tot]=i;
}
}
sort(mem+,mem+tot+);
printf("%d\n",tot);
for(reg i=;i<=tot;++i){
printf("%d ",mem[i]);
}
return ;
} }
signed main(){
Miracle::main();
return ;
} /*
Author: *Miracle*
Date: 2019/1/16 11:46:04
*/
CF1100E的更多相关文章
- CF1100E Andrew and Taxi
题目地址:CF1100E Andrew and Taxi 二分,每次取到一个 \(mid\) ,只保留长度 \(>mid\) 的边 dfs判环,若有环,说明 \(ans>mid\) ,否则 ...
- CF1100E Andrew and Taxi 二分答案+拓扑排序
\(\color{#0066ff}{ 题目描述 }\) 给定一个有向图,改变其中某些边的方向,它将成为一个有向无环图. 现在求一个改变边方向的方案,使得所选边边权的最大值最小. \(\color{#0 ...
- CF-1100 E Andrew and Taxi
CF-1100E Andrew and Taxi https://codeforces.com/contest/1100/problem/E 知识点: 二分 判断图中是否有环 题意: 一个有向图,每边 ...
随机推荐
- Update类型_JDBC的方法_JAVA方法_Loadrunner脚本
java vuser JDBC 参数化的方法 如果不进行参数化 直接把32 33行去掉 ,sql 值写到valuers 中就行了 下面这是 insert,delete,update 三种方法 ...
- 【转】: 塞尔达组在GDC2017演讲的文字翻译:显示的力量
塞尔达系列推出新作的时候,美术风格都有明显变化.本作的风格比起写实,笔触轻快变化幅度大是其特征.2011年公开的技术演示中,画面风格要更加写实.最终版则更接近于卡通.5年里到底发生了什么呢? ▲2 ...
- thinkphp5框架生成二维码(二)
上篇已经讲过了SDK之类的,这个不再重复,有不知道的童鞋们,请去看上篇文章吧. 这里我用的方法比较老旧,大家有更好的方法,可以进行改良,还有linux服务器,记得给文件权限,否则生成的文件会失败的.大 ...
- 关于XSS的一些知识点
安全套接层(SSL)无助于减少XSS攻击.当Web浏览器使用SSL的时候,在网络中传送的数据是经过加密的,但是因为XSS攻击是在客户机器上发生的,所以数据已经被解密了,这时,攻击者仍然能够利用XSS安 ...
- python项目通过配置文件方式配置日志-logging
背景:项目中引入日志是必须的,这里介绍通过配置文件config.ini的方式配置日志 1.新建config.ini 2.添加配置 [loggers]keys=root,ProxyIP [handler ...
- 5个最优秀的微信小程序UI组件库
开发微信小程序的过程中,选择一款好用的组件库,可以达到事半功倍的效果.自从微信小程序面世以来,不断有一些开源组件库出来,下面5款就是排名比较靠前,用户使用量与关注度比较高的小程序UI组件库.还没用到它 ...
- React Native 【学习总结】-【常用命令】
前言 刚接触RN,相信很多人无从下手,不知道下一步要干什么,能干什么,本次学习围绕这个问题,将RN的常用命令总结一下,帮助你快速上手 架构理解 光知道命令的作用,远远不够,如果知道命令背后的意义,才能 ...
- mysqldb下载地址
mysqldb x64 https://pan.baidu.com/s/1dFJ3G0T x32及源码 https://pypi.python.org/pypi/MySQL-python/1.2 ...
- music, let's go
最近研究个新玩意,叫window.AudioContext;不懂?没关系,我也是才接触,这完全可以说个全新领域,这玩意干啥的?顾名思义,媒体上下文,也就是你媒体的数据分析,就是一串数据啊?那有啥用呢? ...
- Python Requests库入门——应用实例-百度、360搜索关键词提交
百度的关键词接口: http://www.baidu.com/s?wd=keyword 360的关键词接口: http://www.so.com/s?q=keyword keyword就是需要查找的关 ...