http://acm.uestc.edu.cn/#/problem/show/916

方老师的分身 III

Time Limit: 3000/1000MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Others)

Submit Status

一天的讲座结束后,方老师的分身们聚在了一起。在合并成一个方老师之前。这些分身要求方老师的真身发糖。这些分身要求方老师至少给他们发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 【拓扑排序】相关推荐

  1. uestc 方老师的分身 III 拓扑排序

    没什么好说的.. 1 #include<iostream> 2 #include<cstdio> 3 #include<cstdlib> 4 #include< ...

  2. UESTC_方老师的分身 II CDOJ 915

    方老师的分身 II Time Limit: 10000/5000MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Others) Submi ...

  3. UESTC 914 方老师的分身I Dijkstra

    题意:求有向图的往返最短路的最长长度. 分析:求第一次到所有点的距离可以用一次Dijkstra求最短路求出来.考虑回来的路,想想就知道,从每个点回来的路即为将边的方向反转再求一次最短路后的结果. 所以 ...

  4. UESTC 915 -- 方老师的分身 II (spfa,dijkstra)

    题目大意:求从一个点到另一个点至少经过k条路径的最短路径长度: 思路分析:用两个变量u和e来维护一个点的dis,u表示当前点的编号,e表示经过多少条边,dis[u][e] 表示走到u点经过e条边的最短 ...

  5. UESTC 915 方老师的分身II --最短路变形

    即求从起点到终点至少走K条路的最短路径. 用两个变量来维护一个点的dis,u和e,u为当前点的编号,e为已经走过多少条边,w[u][e]表示到当前点,走过e条边的最短路径长度,因为是至少K条边,所以大 ...

  6. cdoj915-方老师的分身 II (长度不小于k的最短路)【spfa】

    http://acm.uestc.edu.cn/#/problem/show/915 方老师的分身 II Time Limit: 10000/5000MS (Java/Others)     Memo ...

  7. LeetCode 807. 保持城市天际线 / 630. 课程表 III(贪心+优先队列)/ 851. 喧闹和富有(拓扑排序)

    807. 保持城市天际线 2021.12.13 每日一题 题目描述 给你一座由 n x n 个街区组成的城市,每个街区都包含一座立方体建筑.给你一个下标从 0 开始的 n x n 整数矩阵 grid ...

  8. LeetCode 2050. 并行课程 III(拓扑排序)

    文章目录 1. 题目 2. 解题 1. 题目 给你一个整数 n ,表示有 n 节课,课程编号从 1 到 n . 同时给你一个二维整数数组 relations ,其中 relations[j] = [p ...

  9. 【图论专题】拓扑排序

    拓扑排序 给定一张有向无环图,若一个序列A满足图中的任意一条边(x,y)x都在y的前面呢么序列A就是图的拓扑排序 实际上拓扑排序就是满足所有的边x指向y,x一定在y的前面.这样按照拓扑排序递推,就可以 ...

最新文章

  1. asp在线压缩和解压缩文件(文件夹)
  2. 在 Android Studio 2.2 中愉快地使用 C/C++
  3. SVG脚本编程简介(转)
  4. 【nginx+lua高性能web应用开发(二):开发评论模块(ssi+mysql)】
  5. 【译】探索更轻量的Electron替代品来托管Blazor桌面应用程序
  6. 玩ts要注意什么_幼儿园装修要注意什么
  7. 爱奇艺首届“黑客马拉松“落幕 极客变身“大娱乐家”
  8. html5游戏开发实战第三章,我的启蒙--HTML5 第三章 Canvas
  9. codelldb-x86_64-windows.vsix 下载
  10. 彻底去除2345好压的广告方法
  11. Linux嵌入式开发入门(一)——初探嵌入式开发板的基本使用
  12. 18张图,揭开阿里巴巴开发手册强制使用SLF4J作为门面担当的秘密
  13. Fairy tale(BFS + 大模拟)
  14. 全面、详细、通俗易懂的C语言语法和标准库
  15. 285. 没有上司的舞会
  16. 项目管理的五个典型工具
  17. 游戏玩家的程序猿之路
  18. BrowserslistError:E\ysg_front contains both .browserslistrc and browserslist
  19. TensorFlow keras数据集本地下载路径
  20. 5GNR漫谈10:5G RF射频设计验证

热门文章

  1. Linux远程拷贝下载文件
  2. 简释iptables防火墙
  3. 仿qq邮箱源码程序_巧用小程序·云开发实现邮件发送功能丨实战
  4. flutter环境搭建-完整版
  5. html5开发桌面界面设计,HTML5触摸界面设计与开发
  6. Visual Studio Xamarin中找不到iOS模拟器
  7. Xamarin.Forms教程下载安装Xamarin.iOS
  8. Xamarin iOS开发实战上册(内部资料daxueba.net)
  9. Xamarin ios 教程 Xamarin跨平台开发 C#苹果应用开发
  10. php 5.2.17 mysql_Apache 2.2.15 整合php 5.2.17 Mysql-5.5.8