题目链接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. linux最大允许的文件描述符open files数nofile修改

    open file resource limit 是linux中process可以打开的文件句柄数量.增加这个数值需要调整两个配置: 第一步, 修改系统最大允许的文件描述符 查看当前的设置: $ ca ...

  2. UMD编码规范

    (function(global, factory){ typeof module === 'object' && typeof module.exports === 'object' ...

  3. hibernateTemplate API

    https://docs.spring.io/spring-framework/docs/2.5.x/api/org/springframework/orm/hibernate3/HibernateT ...

  4. Spring-Cloud的版本是如何定义的

    https://blog.csdn.net/peterwanghao/article/details/79633275 Finchley 与 Spring Boot 2.0.x, 兼容,不支持 Spr ...

  5. opencv 学习笔记

    Opencv 笔记 路径问题: 路径输入:Opencv载Qt中不能出现汉字,路径也不能出现汉字在vs中可以出现. (”D:/QTopencv/.1jpg”)=(”D:\\QTopencv\\.1jpg ...

  6. nodejs windows安装

    [安装步骤] 一.安装node.js 1.前往node.js官网下载(我下载的是v10.8.0)并安装工具,这里安装路径选到D盘,e:\Program Files\nodejs 安装完毕在命令行输入以 ...

  7. JMeter学习(六)检查点(转载)

    转载自 http://www.cnblogs.com/yangxia-test JMeter也有像LR中的检查点,本篇就来介绍下JMeter的检查点如何去实现. JMeter里面的检查点通过添加断言来 ...

  8. Structured streaming

    Structured streaming是spark 2.0以后新增的用于实时处理的技术.与spark streaming不同的是,Structured streaming打开了数据源到数据落地之间的 ...

  9. nginx 刷新显示404

    HTML5 History 模式 vue-router 默认 hash 模式 —— 使用 URL 的 hash 来模拟一个完整的 URL,于是当 URL 改变时,页面不会重新加载. 如果不想要很丑的 ...

  10. POJ-2251.DungeonMaster(三维BFS)

    做题时需要注意,爬楼有向上和向下爬之分... 本题大意:输入 l, r, c, 分别代表地牢的楼层数和每层地牢的长和宽,地牢由rock and point and source and key组成,你 ...