HDU 2647 拓扑排序
题意:每个人的工资至少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 拓扑排序的更多相关文章
- hdu 2647 (拓扑排序 邻接表建图的模板) Reward
题目链接http://acm.hdu.edu.cn/showproblem.php?pid=2647 老板给员工发工资,每个人的基本工资都是888,然后还有奖金,然后员工之间有矛盾,有的员工希望比某员 ...
- hdu 2647拓扑排序 容器
#include<stdio.h> #include<queue> #include<vector> #include<iostream> using ...
- hdu 2647拓扑排序 结构体模拟容器
#include<stdio.h> #include<queue> #include<iostream> using namespace std; #define ...
- HDU 4857 拓扑排序 优先队列
n个数,已经有大小关系,现给m个约束,规定a在b之前,剩下的数要尽可能往前移.输出序列 大小关系显然使用拓扑结构,关键在于n个数本身就有大小关系,那么考虑反向建图,优先选择值最大的入度为零的点,这样得 ...
- HDU 1811 拓扑排序 并查集
有n个成绩,给出m个分数间的相对大小关系,问是否合法,矛盾,不完全,其中即矛盾即不完全输出矛盾的. 相对大小的关系可以看成是一个指向的条件,如此一来很容易想到拓扑模型进行拓扑排序,每次检查当前入度为0 ...
- HDU 5638 拓扑排序+优先队列
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5638 题意: 给你一个DAG图,删除k条边,使得能个得到字典序尽可能小的拓扑排序 题解: 把拓扑排序 ...
- 传递 hdu 5961 拓扑排序有无环~
题目:http://acm.hdu.edu.cn/showproblem.php?pid=5961 题目为中文,这里就不描述题意了. 思路: 从题目陈述来看,他将一个有向图用一个邻接矩阵来表示,并且分 ...
- hdu 4324 拓扑排序
题意:给出一堆人的喜爱关系,判断有没有三角恋-_-|| 其实就是判断是否存在三条边的环. 一开始我是这么想的: 先拓扑排序,如果没有环那就直接No 如果有环?挑出环里的任意一个点(拓扑排序结束后不在拓 ...
- HDU 4324 (拓扑排序) Triangle LOVE
因为题目说了,两个人之间总有一个人喜欢另一个人,而且不会有两个人互相喜欢.所以只要所给的图中有一个环,那么一定存在一个三元环. 所以用拓扑排序判断一下图中是否有环就行了. #include <c ...
随机推荐
- docker 创建容器时遇到的坑
坑一.时区问题 在创建系统镜像时,比如centos,会默认最小安装,并且时区默认的是UTC 所以在下好centos的原始镜像后,最好再重新构建一个新的镜像 # 命令 docker pull cento ...
- gradle cache目录(.gradle)剖析
https://zhuanlan.zhihu.com/p/26473930 gradle下载后会对文件路径进行修饰,本文给出反向解析,把文件路径修改为原始路径的办法. 之所以研究这个,本来的目的是为了 ...
- Python max 和 min高级用法
zip max 比较一个字典,是按key比较 如果想比较字典的value max比较只能是相同类型,比如字符串和数字就不能比较会报错 这种会报错
- cloudermanager安装时database connection出现Unexpected error. Unable to verify database connection(图文详解)
不多说,直接上干货! http://www.aboutyun.com/forum.php?mod=viewthread&tid=20455&extra=&page=2 欢迎大家 ...
- 01-struts2配置详解
1 struts.xml配置详解 <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE strut ...
- docker~环境变量到底怎么用
docker已经用了两年多了,从开始的简单应用到现在的自动化部署,已经越来越感觉到它的威力,今天把Hitchhiker部署完成后,看到了它与.net core项目有个类似的地方,就是对于多环境部署的时 ...
- TOJ 2119 Tangled in Cables
描述 You are the owner of SmallCableCo and have purchased the franchise rights for a small town. Unfor ...
- unity向量-数学-三角函数
1.如何在unity写cos60 Mathf.Cos(Mathf.Deg2Rad * ) Deg2Rad将 60 角度转换为弧度,因为里面参数只能填弧度数 2.计算一个Vector3绕旋转中心旋转指定 ...
- linux下统计文本行数的各种方法(二)
上一篇讲的都是统计单个文件的方法,直接在命令行执行就可以.现在试试脚本的方式,统计多个文件的行数 一.统计目录下所有文件的文件数及所有行数 脚本暂时命名为count.sh,代码如下: #!/bin/b ...
- bzoj 5302: [Haoi2018]奇怪的背包
Description Solution 首先 \(v_1,v_2,v_3...v_n,P\) 能够构成的最小数是 \(gcd(P,v_1,v_2,v_3...v_n)\) 然后 \(gcd(P,v_ ...