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 安装使用gitlab
官方镜像地址 ce版本: https://hub.docker.com/r/gitlab/gitlab-ce 文档地址: https://docs.gitlab.com/omnibus/docker ...
- fastclick.js源码解读分析
阅读优秀的js插件和库源码,可以加深我们对web开发的理解和提高js能力,本人能力有限,只能粗略读懂一些小型插件,这里带来对fastclick源码的解读,望各位大神不吝指教~! fastclick诞生 ...
- struts 2 报错Could not find action or resul 常见错误原因分析
1.struts.xml配置的action与我们访问的action或返回的result确实没有匹配导致.这个时候要仔细检查Struts.xml配置文件: 2.我们的action输入正确,返回结果经过无 ...
- JS代码格式化排版工具,web文本编辑器
js格式化代码工具:http://www.cnblogs.com/blodfox777/archive/2008/10/09/1307462.html web文本编辑器 :http://www.div ...
- BNU 4356 ——A Simple But Difficult Problem——————【快速幂、模运算】
A Simple But Difficult Problem Time Limit: 5000ms Memory Limit: 65536KB 64-bit integer IO format: %l ...
- 从Zero到Hero,一文掌握Python关键代码
# 01基础篇 # 变量 #int one=1 some_number=100 print("one=",one) #print type1 print("some_nu ...
- android JNI学习之一
执行System.loadLibrary()函数时,VM会反向调用*.so里的JNI_OnLoad()函数.用途有二:1. VM询问此*.so使用的JNI版本编号.2. VM要求*.so做一些初期设定 ...
- mvc中RedirectToAction()如何传参?
今天在做一个功能的时,使用RedirectToAction()需要从这里传几个参数,从网上查了一下,这样解决.真好. Return RedirectToAction("Index" ...
- 用AJAX实现页面登陆以及注册用户名验证
AJAX即“Asynchronous Javascript And XML”(异步JavaScript和XML),是指一种创建交互式网页应用的网页开发技术. AJAX 是一种用于创建快 ...
- HashMap和Hashtable存放null
Hashmap是可以放key为null的,Hashtable不能放key为null.hashtable放key为null会报空指针异常 1. hashmap put方法源码 public V put( ...