思路 :min max 明显二分答案,二分需要破坏的那些边的中机器人数量最多的那个。
check 过程建边时直接忽略掉小于 mid 的边,这样去检验有无环存在即可。 当时有一点担心会出现
有一个环 有一条边 反过来之后 这个环破坏了 却成就了 另一个环,但是画图发现 这样的图 ,它们两边会形成
一个大环。那个大环一定会通过别的边破坏掉,所以不需要担心这种情况。topo 判环即可。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 | #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; } |
分类:
codeforce 题解
, 二分答案
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET制作智能桌面机器人:结合BotSharp智能体框架开发语音交互
· 软件产品开发中常见的10个问题及处理方法
· .NET 原生驾驭 AI 新基建实战系列:向量数据库的应用与畅想
· 从问题排查到源码分析:ActiveMQ消费端频繁日志刷屏的秘密
· 一次Java后端服务间歇性响应慢的问题排查记录
· 互联网不景气了那就玩玩嵌入式吧,用纯.NET开发并制作一个智能桌面机器人(四):结合BotSharp
· 一个基于 .NET 开源免费的异地组网和内网穿透工具
· 《HelloGitHub》第 108 期
· Windows桌面应用自动更新解决方案SharpUpdater5发布
· 我的家庭实验室服务器集群硬件清单