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 ...
随机推荐
- protobuf参考
https://www.cnblogs.com/chenyangyao/p/5422044.html
- 关于箭头函数的this指向问题
document.onclick = function(){ // 普通函数的this是在运行的时候才临时绑定的,也就是说,函数不运行,你绝对不可能知道this是谁 // 下面这个函数如果是自调用,t ...
- Qt客户端阿里云服上传文件
整体原理: 阿里云提供了c程序上传文件到阿里云服务器的sdk工具包,将这个工具包继承在自己的客户端,调用接口即可实现上传文件. 前期准备: 1.阿里云c程序客户端的sdk,下载地址:https://h ...
- spark第十八篇:Tuning Spark 调优
由于大多数Spark应用都是在内存中计算的,所以,Spark程序的瓶颈可能是集群中的任何资源,比如CPU,网络带宽或者内存等.本指南主要涵盖两个主题: 1.数据序列化.这对于良好的网络性能至关重要,还 ...
- Yii 自带的分页实例
yii自带的分页很好用,简单的几行代码就能把分页搞出来,唯一恼火的是只能写在controller中,所以有时候controller中的方法有点臃肿.废话少说,上代码上图. 一.代码实例: 1.控制器中 ...
- 腾讯云CDB的AI技术实践:CDBTune
欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 作者:邢家树,高级工程师,目前就职于腾讯TEG基础架构部数据库团队.腾讯数据库技术团队维护MySQL内核分支TXSQL,100%兼容原生My ...
- javascript window.open in safari
在ios系统中,无法使用 window.open 打开url,经过一番尝试终于找到了解决办法 var url='http://www.baodu.com'; var deviceAgent = nav ...
- struts2返回结果类型
在action下还有result标签 1.result不只有name,其实还有type result返回类型在struts-default.xml默认的配置文件中有定义,可以看到有result-typ ...
- c#winform循环播放多个视频
环境: vs2015 +winform 首先,vs自带组件很方便,所以,用windowMediaplayer组件,如果做单曲循环播放的话,加个属性: axWindowsMediaPlayer1.set ...
- Spring课程 Spring入门篇 4-8 Spring bean装配之基于java的容器注解说明--基于泛型的自动装配
1 解析 1.1 什么是泛型? 1.2 泛型有什么作用? 1.3 泛型装配样式? 2 代码演练 2.1 泛型应用 1 解析 1.1 什么是泛型? Java泛型设计原则:只要在编译时期没有出现警告,那么 ...