题解 p2017 [USACO09DEC]晕牛Dizzy Cows
前言:P大终于又更新了
正文
由于当时我这个ZZ不知怎么了,这份题解排版可能有些尴尬,建议大家读完题后,看我主程序前的代码的注释,然后看最下面的图片,然后看第一张图片,对不起,望多谅解
以样例为例。具体看代码及其中的注释,这样做的正确性,看最下面说明
#include<iostream>#include<cstdio>#include<queue>using namespace std;/* 晕牛:拓扑排序 根据题干可知,有向边不成环,所以通过拓扑排序可以知道哪个入度少 当你强行把拓扑排序后在排序位置前面的点a和排序在后面的点b链接这一起 形成一条从b到a的有向边,则就会形成环。 而未避免形成环,就要在后面读入无向图时进行判断 而此题由于无向图的双向性不好处理, 于是,就规定输入第一个数字为出度,第二个数字为入度 先把不会形成环的点跑一个拓扑排序 然后在判断让某些点强行连接后会不会有环 会就改方向,不会就不用管 */const int MAXN=100001;int tot,a,b,n,p1,p2,cnt;int top[MAXN];//top是拓扑排序后每个数的编号 int head[MAXN],ver[MAXN],nxt[MAXN],deg[MAXN];//存图 void add(int x,int y){ ver[++tot]=y;nxt[tot]=head[x]; head[x]=tot;deg[y]++;}void topsort(){//拓扑排序 queue<int> q; for(register int i=1;i<=n;i++) if(deg[i]==0) q.push(i),top[i]=++cnt; //先扫一遍,把初始就没有入度的排序 while(q.size()){ int x=q.front();q.pop(); for(register int i=head[x];i;i=nxt[i]){ int y=ver[i]; //y是该到某个边的出度点了 if(!(--deg[y])) q.push(y),top[y]=++cnt; //如果它入度为零的话,就把它塞进栈里 } }}int main(){ scanf("%d%d%d",&n,&p1,&p2); for(register int i=1;i<=p1;i++) scanf("%d%d",&a,&b),add(a,b); topsort(); for(register int i=1;i<=p2;i++){ scanf("%d%d",&a,&b); if(top[a]>top[b]) printf("%d %d\n",b,a); //如果在原本拓扑排序中a的序列在b后面,强行连一条从a到b的边,会有环 else printf("%d %d\n",a,b); } return 0;}
说明
国际惯例:thankyou for your attention
题解 p2017 [USACO09DEC]晕牛Dizzy Cows的更多相关文章
- 洛谷P2017 [USACO09DEC]晕牛Dizzy Cows [拓扑排序]
题目传送门 晕牛Dizzy Cows 题目背景 Hzwer 神犇最近又征服了一个国家,然后接下来却也遇见了一个难题. 题目描述 The cows have taken to racing each o ...
- [USACO09DEC]晕牛Dizzy Cows (拓扑排序)
https://www.luogu.org/problem/P2017 题目背景 Hzwer 神犇最近又征服了一个国家,然后接下来却也遇见了一个难题. 题目描述 The cows have taken ...
- [USACO09DEC] Dizzy Cows 拓扑序
[USACO09DEC] Dizzy Cows 拓扑序 先对有向边跑拓扑排序,记录下每个点拓扑序,为了使最后的图不存在环,加入的\(p2\)条无向边\(u,v\)必须满足\(u\)拓扑序小于\(v\) ...
- 【P3056】【USACO12NOV】笨牛Clumsy Cows
P3056 [USACO12NOV]笨牛Clumsy Cows 题目描述 Bessie the cow is trying to type a balanced string of parenthes ...
- 树形DP【洛谷P3047】 [USACO12FEB]附近的牛Nearby Cows
P3047 [USACO12FEB]附近的牛Nearby Cows 农民约翰已经注意到他的奶牛经常在附近的田野之间移动.考虑到这一点,他想在每一块土地上种上足够的草,不仅是为了最初在这片土地上的奶牛, ...
- 洛谷 P3047 [USACO12FEB]附近的牛Nearby Cows
P3047 [USACO12FEB]附近的牛Nearby Cows 题目描述 Farmer John has noticed that his cows often move between near ...
- 洛谷 P3056 [USACO12NOV]笨牛Clumsy Cows
P3056 [USACO12NOV]笨牛Clumsy Cows 题目描述 Bessie the cow is trying to type a balanced string of parenthes ...
- 【题解】Luogu p3047 [USACO12FEB]附近的牛Nearby Cows 树型dp
题目描述 Farmer John has noticed that his cows often move between nearby fields. Taking this into accoun ...
- 洛谷P2017晕牛
传送门啦 这个题没有想象中复杂. 我们先有向边建立,因为我们无法改变有向边的方向. 建立完之后跑一边拓扑排序,我们按拓扑序小的指向大的就好了. 解释: 我们知道如果一个点在另一个点顺序的后面的话,如果 ...
随机推荐
- Python爬虫利器一之Requests库的用法
前言 之前我们用了 urllib 库,这个作为入门的工具还是不错的,对了解一些爬虫的基本理念,掌握爬虫爬取的流程有所帮助.入门之后,我们就需要学习一些更加高级的内容和工具来方便我们的爬取.那么这一节来 ...
- foo是什么?
在英文程序员社区里,foo bar baz这些词是常用于作为占位符而使用的.要查wiki的话,这项更合适:http://en.wikipedia.org/wiki/Metasyntactic_vari ...
- 8-5 Navicat工具与pymysql模块
一 Navicat 在生产环境中操作MySQL数据库还是推荐使用命令行工具mysql,但在我们自己开发测试时,可以使用可视化工具Navicat,以图形界面的形式操作MySQL数据库 需要掌握的基本操作 ...
- meterpreter命令
meterpreter详解与渗透实战 基本命令: background quit shell irb client.sys.config.sysinfo() 调用windows API:client. ...
- String 、 StringBuffer 和 StringBuilder
StringBuffer (一个线程安全的可变字符串序列,用于多线程) A thread-safe, mutable sequence of characters. StringBuilder (可变 ...
- pthread_rwlock_rdlock和“No such file or directory”
pthread_rwlock_rdlock和"No such file or directory" 调用pthread_rwlock_rdlock时,如果失败报错"pth ...
- .NET基础 (20).NET中的数据库开发
ADO NET和数据库程序基础1 什么是关系型数据库2 如何通过SQL语句来实现行列转换3 ADO NET支持哪几种数据源 ADO NET和数据库的连接1 请简要叙述数据库连接池的机制2 如何提高连接 ...
- ZOJ3775 ?(>_o)! 2017-04-13 23:37 110人阅读 评论(0) 收藏
?(>_o)! Time Limit: 2 Seconds Memory Limit: 65536 KB ?(>_o)! is a pseudo-object-oriented ...
- Java反射API研究(1)——注解Annotation
注解在表面上的意思,只是标记一下这一部分,最好的注解就是代码自身.而在java上,由于注解的特殊性,可以通过反射API获取,这种特性使得注解被广泛应用于各大框架,用于配置内容,代替xml文件配置. 要 ...
- PostgreSQL 表空间
PostgreSQL 表空间 一 介绍使用表空间可以将不同的表放到不同的存储介质或不同的文件系统下,实际上是为表指定一个存储的目录.创建数据库,表,索引时可以指定表空间,将数据库,表,索引放到指定的目 ...