题目链接http://acm.hdu.edu.cn/showproblem.php?pid=2647

老板给员工发工资,每个人的基本工资都是888,然后还有奖金,然后员工之间有矛盾,有的员工希望比某员工的奖金多,老板满足了所以员工的这种心思,而且老板下午发的总工资最少,问最少是多少?比如 a b 表示a的工资比b要高(高一块钱),当出现a b   b c   c a这种环的时候输出-1

拓扑排序http://www.cnblogs.com/tonghao/p/4721072.html

小指向大

邻接表建图

 #include<queue>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std; const int M = 1e4 + ;
int head[M],into[M],n,m,cas,money[M];
struct Edge{
int to; //表示一条边上的大的结点(因为小指向大)编号
int next; //表示边的编号
}edge[M*];//注意为两倍 void init()
{
for (int i= ; i<=n ; i++){
head[i]=-;
into[i]=;
money[i]=;
}
} void addedge(int u(小),int v(大))//小指向大
{
edge[cas].to=v; //表示第cas条边的小的结点为v
edge[cas].next=head[u]; //表示上一条以u为起点的边的编号,就是假设一个点有多个出度
head[u]=cas++; //表示结点u所在的边的编号
into[v]++; //入度
} int topu()
{
queue<int>que;
int num=,sum=;
for (int i= ; i<=n ; i++)
if (into[i]==)
que.push(i);
while (!que.empty()){
int u=que.front();
sum+=money[u];
que.pop();
num++;
for (int i=head[u] ; i!=- ; i=edge[i].next){
into[edge[i].to]--;
if (into[edge[i].to]==){
que.push(edge[i].to);
money[edge[i].to]=money[u]+;
}
}
}
if (num!=n) return -;
return sum;
} int main()
{
while (~scanf("%d%d",&n,&m)){
init();
cas=;
while (m--){
int a,b;
scanf("%d%d",&a,&b);
addedge(b,a);
}
printf("%d\n",topu());
}
return ;
}

vector建图的表示,其实差不多

 #include<queue>
#include<vector>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std; const int M = 1e4 + ;
int a[M],into[M],money[M],n,m;
vector<int>q[M]; int topu()
{
memset(into,,sizeof(into));
for (int i= ; i<=n ; i++)
for (int j= ; j<q[i].size() ; j++)
into[q[i][j]]++;
queue<int>que;
int cnt=,sum=;
for (int i= ; i<=n ; i++)
if (into[i]==)
que.push(i);
while (!que.empty()){
int u=que.front();
que.pop();
cnt++;
sum+=money[u];
for (int i= ; i<q[u].size() ; i++){
int v=q[u][i];
into[v]--;
if (into[v]==) {
que.push(v);
money[v]=money[u]+;
}
}
}
if (cnt!=n) return -;
return sum;
} int main()
{
while (~scanf("%d%d",&n,&m)){
for (int i= ; i<=n ; i++) {
q[i].clear();
money[i]=; }
while (m--){
int a,b;
scanf("%d%d",&a,&b);
q[b].push_back(a);
}
printf("%d\n",topu());
}
return ;
}

hdu 2647 (拓扑排序 邻接表建图的模板) Reward的更多相关文章

  1. HDU 2647 拓扑排序

    题意:每个人的工资至少888,然后有m个条件,前者比后者要多.求最少工资. 分析: 最开始的开邻接矩阵的肯定超时,如果dfs,会出现由于刚开始不是从入度为0的点出发,后期修改不了.比较麻烦. 正确方式 ...

  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 4324 拓扑排序

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

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

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

  6. PTA 邻接表存储图的广度优先遍历(20 分)

    6-2 邻接表存储图的广度优先遍历(20 分) 试实现邻接表存储图的广度优先遍历. 函数接口定义: void BFS ( LGraph Graph, Vertex S, void (*Visit)(V ...

  7. HDU 1811 拓扑排序 并查集

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

  8. 【bzoj1565】[NOI2009]植物大战僵尸 拓扑排序+最大权闭合图

    原文地址:http://www.cnblogs.com/GXZlegend/p/6808268.html 题目描述 输入 输出 仅包含一个整数,表示可以获得的最大能源收入.注意,你也可以选择不进行任何 ...

  9. QDUOJ 生化危机 邻接表存图+BFS

    生化危机 发布时间: 2015年10月10日 18:05   时间限制: 1000ms   内存限制: 256M 描述 X博士想造福人类, 研发一种可以再生肢体的药物, 可是很不幸......研究失败 ...

随机推荐

  1. mysql游标错误

    DECLARE done INTEGER DEFAULT 0;DECLARE cur CURSOR FOR SELECT f_time,f_value FROM this_yc201508;DECLA ...

  2. Vue sync修饰符的使用

    父子组件传值,父组件可以给子组件传值,但是子组件是不能修改组件提供的值,这里vue提供了sync修饰符,以前父组件点击子组件显示,子组件关闭按钮,父组件再点击子组件就无法让子组件显示.因为子组件点击关 ...

  3. 用R包中heatmap画热图

    一:导入R包及需要画热图的数据 library(pheatmap) data<- read.table("F:/R练习/R测试数据/heatmapdata.txt",head ...

  4. JVM 图解--1.6,1.7,1.8

  5. Controlled Components

    [Controlled Components] In HTML, form elements such as <input>, <textarea>, and <sele ...

  6. Java读取文件-BufferedReader/FileReader/InputStreamReader/FileInputStream的关系和区别

    一.Java读取和存储文件数据流 Java读取文件,实际是将文件中的字节流转换成字符流输出到屏幕的过程   这里面涉及到两个类:InputStreamReader和OutputStreamWriter ...

  7. js 字符与ascii码转换

    参考 http://www.jb51.net/article/43534.htm ' '.charCodeAt();  //字符转ascii String.fromCharCode(10);  //a ...

  8. js中获取一个对象里面的方法和属性的javascript

    <script type="text/javascript"> var obj = { attribute:1, method:function() { alert(& ...

  9. centos 7 下 TFTP服务器安装

    一.介绍 TFTP(Trivial File Transfer Protocol,简单文件传输协议)),是一个基于UDP 协议 69端口 实现的用于在客户机和服务器之间进行简单文件传输的协议提供不复杂 ...

  10. Centos 下使用VLAN+Bridge 搭建KVM基础网络环境

    一.使用环境介绍 宿主机上同时运行多网段虚拟机,为了解决宿主机网卡资源紧张问题,采用如下网络模式:(本实验vlan 105:192.168.5.x    vlan108:192.168.8.x) 二. ...