题意:每个人的工资至少888,然后有m个条件,前者比后者要多。求最少工资。

分析:

最开始的开邻接矩阵的肯定超时,如果dfs,会出现由于刚开始不是从入度为0的点出发,后期修改不了。比较麻烦。

正确方式是,用队列实现,不需要像普通队列一样,用vis数组标记,而是根据入度是否为0的标准加入队列。

 /*
#include <bits/stdc++.h> using namespace std; const int maxn = 10000+5;
int n,m; vector<int> G[maxn]; int c[maxn];
int d[maxn];
bool dfs(int u,int k) {
c[u] = -1;
//d[u] = k;
for(int i=0;i<G[u].size();i++) {
int v = G[u][i]; if(c[v]<0) return false;
else if(!c[v]&&!dfs(v,k+1)) return false; } c[u] = 1;
return true; } bool toposort() {
memset(c,0,sizeof(c));
for(int u=1;u<=n;u++) {
if(!c[u])
if(!dfs(u,0))
return false;
}
return true;
} int main()
{
freopen("in.txt","r",stdin);
while(scanf("%d%d",&n,&m)!=EOF) { for(int i=0;i<=n;i++)
G[i].clear(); for(int i=0;i<m;i++) {
int u,v;
scanf("%d%d",&u,&v);
G[v].push_back(u);
} memset(d,0,sizeof(d)); int sum = 0; if(toposort()) {
for(int i=1;i<=n;i++) {
sum+=d[i];
}
printf("%d\n",888*n+sum);
}
else puts("-1"); }
return 0;
}
*/ #include <bits/stdc++.h> using namespace std; const int maxn = +; vector<int> G[maxn];
int degree[maxn]; int main()
{
//freopen("in.txt","r",stdin);
int n,m;
while(scanf("%d%d",&n,&m)!=EOF) { for(int i=;i<=n;i++) {
G[i].clear();
}
memset(degree,,sizeof(degree)); for(int i=;i<m;i++) {
int u,v;
scanf("%d%d",&u,&v);
G[v].push_back(u);
degree[u]++;
} queue<pair<int,int> > Q; int cnt = ,ans = ;
for(int i=;i<=n;i++) {
if(!degree[i]) {
Q.push(make_pair(i,));
ans+=;
cnt++;
}
} while(!Q.empty()) {
pair<int,int> u = Q.front();
Q.pop(); for(int i=;i<G[u.first].size();i++) {
int v = G[u.first][i];
degree[v]--;
if(!degree[v]) {
Q.push(make_pair(v,u.second+));
ans += u.second + ;
cnt++;
}
} } if(cnt==n)
printf("%d\n",ans);
else puts("-1"); }
return ;
}

HDU 2647 拓扑排序的更多相关文章

  1. hdu 2647 (拓扑排序 邻接表建图的模板) Reward

    题目链接http://acm.hdu.edu.cn/showproblem.php?pid=2647 老板给员工发工资,每个人的基本工资都是888,然后还有奖金,然后员工之间有矛盾,有的员工希望比某员 ...

  2. hdu 2647拓扑排序 容器

    #include<stdio.h> #include<queue> #include<vector> #include<iostream> using ...

  3. hdu 2647拓扑排序 结构体模拟容器

    #include<stdio.h> #include<queue> #include<iostream> using namespace std; #define ...

  4. HDU 4857 拓扑排序 优先队列

    n个数,已经有大小关系,现给m个约束,规定a在b之前,剩下的数要尽可能往前移.输出序列 大小关系显然使用拓扑结构,关键在于n个数本身就有大小关系,那么考虑反向建图,优先选择值最大的入度为零的点,这样得 ...

  5. HDU 1811 拓扑排序 并查集

    有n个成绩,给出m个分数间的相对大小关系,问是否合法,矛盾,不完全,其中即矛盾即不完全输出矛盾的. 相对大小的关系可以看成是一个指向的条件,如此一来很容易想到拓扑模型进行拓扑排序,每次检查当前入度为0 ...

  6. HDU 5638 拓扑排序+优先队列

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5638 题意: 给你一个DAG图,删除k条边,使得能个得到字典序尽可能小的拓扑排序 题解: 把拓扑排序 ...

  7. 传递 hdu 5961 拓扑排序有无环~

    题目:http://acm.hdu.edu.cn/showproblem.php?pid=5961 题目为中文,这里就不描述题意了. 思路: 从题目陈述来看,他将一个有向图用一个邻接矩阵来表示,并且分 ...

  8. hdu 4324 拓扑排序

    题意:给出一堆人的喜爱关系,判断有没有三角恋-_-|| 其实就是判断是否存在三条边的环. 一开始我是这么想的: 先拓扑排序,如果没有环那就直接No 如果有环?挑出环里的任意一个点(拓扑排序结束后不在拓 ...

  9. HDU 4324 (拓扑排序) Triangle LOVE

    因为题目说了,两个人之间总有一个人喜欢另一个人,而且不会有两个人互相喜欢.所以只要所给的图中有一个环,那么一定存在一个三元环. 所以用拓扑排序判断一下图中是否有环就行了. #include <c ...

随机推荐

  1. 墨菲定律&吉德林法则&吉尔伯特定律&沃尔森法则&福克兰定律

    一.墨菲定律:越害怕什么,就越会发生什么 二.吉德林法则:把问题清楚地写下来,就已经解决一半了 三.吉尔伯特定律:工作中的最大问题就是没人跟你说该如何去做 四.沃尔森法则:把信息和情报排在第一位,金钱 ...

  2. docker 创建容器时遇到的坑

    坑一.时区问题 在创建系统镜像时,比如centos,会默认最小安装,并且时区默认的是UTC 所以在下好centos的原始镜像后,最好再重新构建一个新的镜像 # 命令 docker pull cento ...

  3. Go语言下载网络图片或文件

    最近闲来无事, 于是就简单学习了下Go语言的基本的用法.由于实践才是最快的学习方法,所以这里就以下载网络图片或文件入手来学习Go语言 文件下载到本地,通常的思路就是先获得网络文件的 输入流 以及本地文 ...

  4. Android中改变Activity的不同icon:activity-alias

    Android设置title中的Icon有几种方法,介绍如下: 一种是直接在AndroidManifest.xml文件中设置android:icon属性,这种方法简单有效,应该算是我们最常用的设置Ic ...

  5. linux下安装redis及PHP扩展应用

    一.redis安装 1 下载redis安装包 wget http://redis.googlecode.com/files/redis-2.4.17.tar.gz (若无法下载请手动下载) 2 编译安 ...

  6. CityBuilder导入OSGB,生成3DML填坑

    工具:CityBuilder 问题1:导入osgb时,中文路径报错 当导入osgb layer时,Input folder和output foder 中最好不要出现中文 否则可能报出如下错误: 日志: ...

  7. 白话SpringCloud | 第六章:Hystrix监控面板及数据聚合(Turbine)

    前言 前面一章,我们讲解了如何整合Hystrix.而在实际情况下,使用了Hystrix的同时,还会对其进行实时的数据监控,反馈各类指标数据.今天我们就将讲解下Hystrix Dashboard和Tur ...

  8. AtCoder Grand Contest 023 C - Painting Machines

    Description 一个长度为 \(n\) 的序列,初始都为 \(0\),你需要求出一个长度为 \(n-1\) 的排列 \(P\), 按照 \(1\) 到 \(n\) 的顺序,每次把 \(P_i\ ...

  9. css设置文字中间的小竖线

    主要css属性是border-right border-right:1px solid gray; padding-right:10px; padding-left:10px; <div dat ...

  10. c# 快速修改图片颜色

    public static void ChangeColour(this Bitmap bmp, byte inColourR, byte inColourG, byte inColourB, byt ...