cdoj916-方老师的分身 III 【拓扑排序】
http://acm.uestc.edu.cn/#/problem/show/916
方老师的分身 III
Time Limit: 3000/1000MS (Java/Others) Memory Limit: 65535/65535KB (Java/Others)
一天的讲座结束后,方老师的分身们聚在了一起。在合并成一个方老师之前。这些分身要求方老师的真身发糖。这些分身要求方老师至少给他们发888个糖。这还不够,有的分身要求分比另外某个分身的糖多。问方老师最少分多少糖。
Input
有多组数据。
第一行2个整数N(1≤N≤10000),M(0≤M≤20000)表示分身数和要求数。
接下来m行,每行2个整数x,y。表示x要求分的比y更多糖果。
Output
一个整数,方老师最少要分多少糖。如过无法完成分糖输出−1。
Sample input and output
Sample Input | Sample Output |
---|---|
2 1 1 2 2 2 1 2 2 1 |
1777 -1 |
题解:很容易想到拓扑排序。题目里设计环,用拓扑排序可以判断环的存在。另外需要注意,拓扑的方向。
代码:
1 #include <fstream> 2 #include <iostream> 3 #include <cstdio> 4 #include <cstring> 5 6 using namespace std; 7 8 const int cnt=888; 9 const int N=10005; 10 const int M=20005; 11 int n,m; 12 int u[M],v[M],head[N],la[M]; 13 int du[N],cn[N]; 14 bool b; 15 16 void topology(); 17 18 int main() 19 { 20 //freopen("D:\\input.in","r",stdin); 21 //freopen("D:\\output.out","w",stdout); 22 while(~scanf("%d%d",&n,&m)){ 23 memset(head,-1,sizeof(head)); 24 memset(du,0,sizeof(du)); 25 memset(cn,0,sizeof(cn)); 26 for(int i=0;i<m;i++){ 27 scanf("%d%d",&v[i],&u[i]); 28 la[i]=head[u[i]]; 29 head[u[i]]=i; 30 du[v[i]]++; 31 } 32 b=true; 33 topology(); 34 if(b){ 35 int ans=cnt*n; 36 for(int i=1;i<=n;i++){ 37 ans+=cn[i]; 38 } 39 printf("%d\n",ans); 40 }else{ 41 puts("-1"); 42 } 43 } 44 return 0; 45 } 46 void topology(){ 47 int top=-1; 48 for(int i=1;i<=n;i++) 49 if(!du[i]) du[i]=top,top=i; 50 for(int i=0;i<n;i++){ 51 if(top==-1){ 52 b=false; 53 return; 54 }else{ 55 int j=top; 56 top=du[top]; 57 for(int k=head[j];k!=-1;k=la[k]){ 58 cn[v[k]]=max(cn[v[k]],cn[j]+1); 59 if(!(--du[v[k]])) du[v[k]]=top,top=v[k]; 60 } 61 } 62 } 63 }
cdoj916-方老师的分身 III 【拓扑排序】相关推荐
- uestc 方老师的分身 III 拓扑排序
没什么好说的.. 1 #include<iostream> 2 #include<cstdio> 3 #include<cstdlib> 4 #include< ...
- UESTC_方老师的分身 II CDOJ 915
方老师的分身 II Time Limit: 10000/5000MS (Java/Others) Memory Limit: 65535/65535KB (Java/Others) Submi ...
- UESTC 914 方老师的分身I Dijkstra
题意:求有向图的往返最短路的最长长度. 分析:求第一次到所有点的距离可以用一次Dijkstra求最短路求出来.考虑回来的路,想想就知道,从每个点回来的路即为将边的方向反转再求一次最短路后的结果. 所以 ...
- UESTC 915 -- 方老师的分身 II (spfa,dijkstra)
题目大意:求从一个点到另一个点至少经过k条路径的最短路径长度: 思路分析:用两个变量u和e来维护一个点的dis,u表示当前点的编号,e表示经过多少条边,dis[u][e] 表示走到u点经过e条边的最短 ...
- UESTC 915 方老师的分身II --最短路变形
即求从起点到终点至少走K条路的最短路径. 用两个变量来维护一个点的dis,u和e,u为当前点的编号,e为已经走过多少条边,w[u][e]表示到当前点,走过e条边的最短路径长度,因为是至少K条边,所以大 ...
- cdoj915-方老师的分身 II (长度不小于k的最短路)【spfa】
http://acm.uestc.edu.cn/#/problem/show/915 方老师的分身 II Time Limit: 10000/5000MS (Java/Others) Memo ...
- LeetCode 807. 保持城市天际线 / 630. 课程表 III(贪心+优先队列)/ 851. 喧闹和富有(拓扑排序)
807. 保持城市天际线 2021.12.13 每日一题 题目描述 给你一座由 n x n 个街区组成的城市,每个街区都包含一座立方体建筑.给你一个下标从 0 开始的 n x n 整数矩阵 grid ...
- LeetCode 2050. 并行课程 III(拓扑排序)
文章目录 1. 题目 2. 解题 1. 题目 给你一个整数 n ,表示有 n 节课,课程编号从 1 到 n . 同时给你一个二维整数数组 relations ,其中 relations[j] = [p ...
- 【图论专题】拓扑排序
拓扑排序 给定一张有向无环图,若一个序列A满足图中的任意一条边(x,y)x都在y的前面呢么序列A就是图的拓扑排序 实际上拓扑排序就是满足所有的边x指向y,x一定在y的前面.这样按照拓扑排序递推,就可以 ...
最新文章
- asp在线压缩和解压缩文件(文件夹)
- 在 Android Studio 2.2 中愉快地使用 C/C++
- SVG脚本编程简介(转)
- 【nginx+lua高性能web应用开发(二):开发评论模块(ssi+mysql)】
- 【译】探索更轻量的Electron替代品来托管Blazor桌面应用程序
- 玩ts要注意什么_幼儿园装修要注意什么
- 爱奇艺首届“黑客马拉松“落幕 极客变身“大娱乐家”
- html5游戏开发实战第三章,我的启蒙--HTML5 第三章 Canvas
- codelldb-x86_64-windows.vsix 下载
- 彻底去除2345好压的广告方法
- Linux嵌入式开发入门(一)——初探嵌入式开发板的基本使用
- 18张图,揭开阿里巴巴开发手册强制使用SLF4J作为门面担当的秘密
- Fairy tale(BFS + 大模拟)
- 全面、详细、通俗易懂的C语言语法和标准库
- 285. 没有上司的舞会
- 项目管理的五个典型工具
- 游戏玩家的程序猿之路
- BrowserslistError:E\ysg_front contains both .browserslistrc and browserslist
- TensorFlow keras数据集本地下载路径
- 5GNR漫谈10:5G RF射频设计验证
热门文章
- Linux远程拷贝下载文件
- 简释iptables防火墙
- 仿qq邮箱源码程序_巧用小程序·云开发实现邮件发送功能丨实战
- flutter环境搭建-完整版
- html5开发桌面界面设计,HTML5触摸界面设计与开发
- Visual Studio Xamarin中找不到iOS模拟器
- Xamarin.Forms教程下载安装Xamarin.iOS
- Xamarin iOS开发实战上册(内部资料daxueba.net)
- Xamarin ios 教程 Xamarin跨平台开发 C#苹果应用开发
- php 5.2.17 mysql_Apache 2.2.15 整合php 5.2.17 Mysql-5.5.8