题目链接

#include <set>
#include <map>
#include <cmath>
#include <queue>
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
typedef long long LL;
using namespace std;
const int inf=INT_MAX;
const int maxn=10000+10;
int n,m;
int cast[maxn];
int R[maxn];
vector<int>E[maxn];
void init()
{
for(int i=0;i<=n;i++)
{
E[i].clear();
cast[i]=0;
R[i]=0;
}
}
int main ()
{
while(~scanf("%d%d",&n,&m))
{
init();
int s,t,count=0;//count统计入度可以达到0的边的个数
for(int i=1;i<=m;i++)//建v表
{
scanf("%d%d",&s,&t);
E[t].push_back(s);
R[s]++;
}
queue<int>que;
for(int i=1;i<=n;i++)
{
if(R[i]==0)
{
que.push(i);
R[i]--;
cast[i]=888;
count++;
}
}
while(!que.empty())
{
int id=que.front();
que.pop();
int l=(int)E[id].size();
for(int i=0;i<l;i++)
{
int t=E[id][i];
R[t]--;
if(R[t]==0)
{
que.push(t);
count++;
cast[t]=cast[id]+1;
}
}
}
if(count==n)//没有回路
{
int sum=0;
for(int i=1;i<=n;i++)
sum+=cast[i];
printf("%d\n",sum);
}
else
{
printf("-1\n");
}
}
return 0;
}

拓扑排序<反向拓扑+有向环的判断>的更多相关文章

  1. ACM/ICPC 之 拓扑排序-反向(POJ3687)

    难点依旧是题意....需要反向构图+去重+看题 POJ3687-Labeling Balls 题意:1-N编号的球,输出满足给定约束的按原编号排列的重量序列,如果有多组答案,则输出编号最小的Ball重 ...

  2. HDU2647(拓扑排序+反向建图)

    题意不说了,说下思路. 给出的关系是a要求的工资要比b的工资多,因为尽可能的让老板少付钱,那么a的工资就是b的工资+1.能够确定关系为a>b,依据拓扑排序建边的原则是把"小于" ...

  3. HDU 4857 逃生 【拓扑排序+反向建图+优先队列】

    逃生 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission ...

  4. HDU 2647 Reward 【拓扑排序反向建图+队列】

    题目 Reward Dandelion's uncle is a boss of a factory. As the spring festival is coming , he wants to d ...

  5. hdu 4857 逆向拓扑排序+反向输出

    /*一组测试实例 4 4 2 3 1 2 4 */ #include<stdio.h> #include<string.h> #include<queue> usi ...

  6. hdoj--4857--逃生(拓扑排序+反向建图)

    逃生 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submiss ...

  7. [bzoj3887][Usaco2015 Jan]Grass Cownoisseur_trajan_拓扑排序_拓扑序dp

    [Usaco2015 Jan]Grass Cownoisseur 题目大意:给一个有向图,然后选一条路径起点终点都为1的路径出来,有一次机会可以沿某条边逆方向走,问最多有多少个点可以被经过?(一个点在 ...

  8. POJ 1094 Sorting It All Out (拓扑排序,判断序列是否唯一,图是否有环)

    题意:给出n个字符,m对关系,让你输出三种情况:     1.若到第k行时,能判断出唯一的拓扑序列,则输出:         Sorted sequence determined after k re ...

  9. 大数据工作流任务调度--有向无环图(DAG)之拓扑排序

    点击上方蓝字关注DolphinScheduler(海豚调度) |作者:代立冬 |编辑:闫利帅 回顾基础知识: 图的遍历 图的遍历是指从图中的某一个顶点出发,按照某种搜索方法沿着图中的边对图中的所有顶点 ...

随机推荐

  1. 虚拟主机VPS区别:DigitalOcean优惠码

    虚拟主机与VPS区别在哪?这里从几个角度解释下: 虚拟化技术 把一台独立服务器用虚拟化技术“切割”开,分配不同的硬件配置,然后分配给不同的普通用户使用,就是虚拟主机的基本思路.部分奸商为了节省成本,甚 ...

  2. 单例:用AFNetworking封装举例

    创建单例的方式 import AFNetworking class NetworkTools: AFHTTPSessionManager { //let是线程安全的 //使用单例实例只需要拿到Netw ...

  3. android service文章转载

    郑重转载几篇网络文章: Android Service使用 http://www.cnblogs.com/linlf03/archive/2013/06/14/3135273.html Android ...

  4. Python 跳出多重循环

    Python 本身没有“break n” 和“goto” 的语法,这也造成了Python 难以跳出多层(特定层数)循环.下面是几个跳出多层(特定层数)循环的tip. 1.自定义异常   class g ...

  5. RHCE备考倒计时

    2014年7月31日 周四 上海考试 认证RHCE6

  6. Python使用shape计算矩阵的行和列

    shape函数是numpy.core.fromnumeric中的函数,它的功能是读取矩阵的长度. 1 >>> a=mat([[1,2,3],[5,6,9]]); 2 >> ...

  7. ural 1073.Square Country(动态规划)

    1073. Square Country Time limit: 1.0 secondMemory limit: 64 MB There live square people in a square ...

  8. discuz论坛小记

    客服要改sitemap.php要展示最新的回帖内容,但是我不懂discuz,对数据库和php不是特别熟练,PHP后台开发的程序猿太忙了!!~没办法硬着头皮上~ 哎呀数据库对应的是哪个啊?让我看看con ...

  9. 一个初学者的辛酸路程-Python基础-3

    前言 不要整天沉迷于学习-. 字典 一.我想跟你聊聊字典 1.为何要有字典? 大家有没有想过为什么要有字典?有列表不就可以了吗? 也许大家会这么认为,我给大家举个例子,大家就明白了. 比如说,我通讯录 ...

  10. C# 鼠标事件弹框

    if (e.Button == MouseButtons.Right) { if (gridView1.GetFocusedRowCellValue("color").ToStri ...