codeforces-1385E(拓扑排序)
发布日期:2022-03-30 18:18:17
浏览次数:38
分类:博客文章
本文共 1404 字,大约阅读时间需要 4 分钟。
Directing Edges
题目描述:
给定n个点m条边,其中一些边是有向的,一些边是无向的,现在你需要将这些无向的边确定方向,并判断是否可以生成一个有向无环图
思路:
显而易见如果给出的有向边没有形成环的话,剩下的无向边一定可以使他们不形成环,于是只需要将给定的有向边做一遍拓扑排序,判断是否已经成环,未成环的话就将所有无向边按拓扑序定向即可使图无环
代码:
#includeusing namespace std;using ll = long long;const ll N = 1e6;const double PI = acos(-1.0);#define Test ll tesnum;tesnum = read();while(tesnum--)ll read();vector g[200005];vector > v;int deg[N],pos[N];int cnt;int main(){ Test{ cnt = 0; v.clear(); int n,m; cin>>n>>m; for(int i = 1; i <= n; i++)g[i].clear(); for(int i = 1; i <= n; i++)deg[i] = pos[i] = 0; for(int i = 1; i <= m; i++){ int w,x,y; cin>>w>>x>>y; v.emplace_back(make_pair(x,y)); if(w==1){ g[x].emplace_back(y); deg[y]++; } } queue q; for(int i = 1; i <= n; i++){ if(deg[i]==0) q.push(i); } while(!q.empty()) { int u = q.front(); q.pop(); pos[u] = ++cnt; for(int i = 0; i < g[u].size(); i++){ deg[g[u][i]]--; if(deg[g[u][i]]==0){ q.push(g[u][i]); } } } if(cnt==n){ cout<<"YES"< pos[x.second]){ cout< <<" "< <
转载地址:https://www.cnblogs.com/cloudplankroader/p/13341693.html 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
第一次来,支持一个
[***.219.124.196]2024年03月28日 15时49分26秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
制作一个表格,显示班级的学生信息
2019-04-26
JavaScript的选项卡操作
2019-04-26
Linux常用命令及文件处理命令
2019-04-26
Linux常见目录及作用
2019-04-26
文件链接命令
2019-04-26
Oracle篇--05 Oracle 视图、序列、约束
2019-04-26
【Java面试题四】sql面试题(1)
2019-04-26
【Java面试题五】sql面试题(2)
2019-04-26
【Java面试题六】多线程篇
2019-04-26
【Java面试题七】Java泛型篇
2019-04-26
【Java面试题八】Java算法优化篇
2019-04-26
JDBC与DAO篇--01 JDBC原理、JDBC基础编程
2019-04-26
【Java面试题九】算法篇
2019-04-26
架构设计与分层
2019-04-26
【01】Java面试----基础方面的陷阱
2019-04-26
排序算法整合
2019-04-26
Java程序员常见笔试题分析
2019-04-26
Java笔试题
2019-04-26
Spring Boot快速入门---(一)spring boot的创建及几种启动方式
2019-04-26