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

题解:很容易想到拓扑排序。题目里设计环,用拓扑排序可以判断环的存在。另外需要注意,拓扑的方向。

代码:

 #include <fstream>
#include <iostream>
#include <cstdio>
#include <cstring> using namespace std; const int cnt=;
const int N=;
const int M=;
int n,m;
int u[M],v[M],head[N],la[M];
int du[N],cn[N];
bool b; void topology(); int main()
{
//freopen("D:\\input.in","r",stdin);
//freopen("D:\\output.out","w",stdout);
while(~scanf("%d%d",&n,&m)){
memset(head,-,sizeof(head));
memset(du,,sizeof(du));
memset(cn,,sizeof(cn));
for(int i=;i<m;i++){
scanf("%d%d",&v[i],&u[i]);
la[i]=head[u[i]];
head[u[i]]=i;
du[v[i]]++;
}
b=true;
topology();
if(b){
int ans=cnt*n;
for(int i=;i<=n;i++){
ans+=cn[i];
}
printf("%d\n",ans);
}else{
puts("-1");
}
}
return ;
}
void topology(){
int top=-;
for(int i=;i<=n;i++)
if(!du[i]) du[i]=top,top=i;
for(int i=;i<n;i++){
if(top==-){
b=false;
return;
}else{
int j=top;
top=du[top];
for(int k=head[j];k!=-;k=la[k]){
cn[v[k]]=max(cn[v[k]],cn[j]+);
if(!(--du[v[k]])) du[v[k]]=top,top=v[k];
}
}
}
}

cdoj916-方老师的分身 III 【拓扑排序】的更多相关文章

  1. UESTC 916 方老师的分身III --拓扑排序

    做法: 如果有a<b的关系,则连一条a->b的有向边,连好所有边后,找入度为0的点作为起点,将其赋为最小的价值888,然后其所有能到的端点,价值加1,加入队列,删去上一个点,然后循环往复, ...

  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 --最短路变形

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

  5. UESTC 917 方老师的分身IV --求欧拉路径

    判断欧拉路径是否存在及求出字典序最小的欧拉路径问题(如果存在). 将字符串的第一个字母和最后一个字母间连边,将字母看成点,最多可能有26个点(a-z),如果有欧拉路径,还要判断是否有欧拉回路,如果有, ...

  6. UESTC_方老师分身 I CDOJ 914

    方老师分身 I Time Limit: 3000/1000MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Others) Submit S ...

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

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

  8. 2016"百度之星" - 初赛(Astar Round2A)Gym Class(拓扑排序)

    Gym Class  Accepts: 849  Submissions: 4247  Time Limit: 6000/1000 MS (Java/Others)  Memory Limit: 65 ...

  9. ACM: hihicoder #1174 : 拓扑排序·一 STL- queue

    #1174 : 拓扑排序·一 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 由于今天上课的老师讲的特别无聊,小Hi和小Ho偷偷地聊了起来. 小Ho:小Hi,你这学期有选 ...

随机推荐

  1. Cache应用中的服务过载案例研究

    https://tech.meituan.com/avalanche-study.html

  2. nginx 使用ctx实现数据共享,修改上下文

    环境: init_worker_by_lua, set_by_lua, rewrite_by_lua, access_by_lua, content_by_lua, header_filter_by_ ...

  3. rundll32命令大全

    rundll32命令大全 命令列:rundll32.exe user.exe,restartwindows 功能: 系统重启 命令列:rundll32.exe user.exe,exitwindows ...

  4. jdk、jre、JVM的简单区别与联系

    2015-10-20 23:08:52 (1)jdk Java development toolkit(开发工具包),JDK是整个JAVA的核心,包括了Java运行环境jre(Java Runtime ...

  5. FastAdmin 源码分析:jQuery 含逗号的选择器

    FastAdmin 源码分析:jQuery 含逗号的选择器 在 FastAdmin 你常常会看到以下 jQuery 选择器的代码. if ($(".datetimepicker", ...

  6. 【转】Linux export 命令

    原文网址:http://mymobile.iteye.com/blog/1407601 Linux export 命令 功能说明: 设置或显示环境变量.(比如我们要用一个命令,但这个命令的执行文件不在 ...

  7. redis+php实现微博功能(一)

    (一).微博功能概况 微博用户账号注册 微博用户登录 微博发布 添加微博好友(粉丝) 微博推送 微博冷数据写入mysql数据库 (二).redis数据结构设计 这节分享微博用户注册与登录:我们完全采用 ...

  8. 免费数据集下载网站【dataset】

    https://github.com/awesomedata/awesome-public-datasets

  9. redis 命令集

    进入客户端 /usr/local/bin/redis-cli 选择数据库 select index (0-15) 退出 quit

  10. MVC自定义错误页面

    MVC异常处理主要有三种方案:1.基于HandleErrorAttribute重写OnException方法:2.基于Global.apsx添加Application_Error方法:3.直接在Web ...