题目链接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. vue pros 子组件接收父组件传递的值

    1.子组件 ItemTemplate.vue <template> <div class="item"> <li v-for="pdata ...

  2. 2018面向对象程序设计(Java)第4周学习指导及要求

    2018面向对象程序设计(Java) 第4周学习指导及要求(2017.9.19-2017.9. 26)   学习目标 掌握类与对象的基础概念,理解类与对象的关系: 掌握对象与对象变量的关系: 掌握预定 ...

  3. python-ceilometerclient命令行(终结)

    ceilometerclient入口 工程ceilometerclient shell.py中的main方法 ceilometerclient目录 --ceilometerclient --commo ...

  4. unity中Android环境变量配置

    http://www.cnblogs.com/windytrees/p/7533477.html

  5. 老代码:js实现二级城市联动(MVC)

    FormViewCity 为mvc控制器传给view的数据,包括一个MyCitys集合字段. <%@ Page Title="" Language="C#" ...

  6. jenkins动态参数插件Dynamic Parameter安装及简单使用

    插件安装: 1.先下载插件hpi文件到本地   jenkins插件下载地址 http://mirror.xmission.com/jenkins/plugins/ http://updates.jen ...

  7. getHibernateTemplate()的用法 (转)

    在spring 中获得由spring所配置的hibernate的操作对象,然后利用此对象进行,保存,修改和删除等操作, 此方法是在配置了spring以后,hibernate由spring接管,不直接使 ...

  8. sys系统用户长时间未登录导致密码过期

    ORA-28001: the password has expired (DBD ERROR: OCISessionBegin) 问题描述:当登陆em时使用sys帐号登陆进去后,数据库实例提示ORA- ...

  9. docker使用以及dockerfile编写

    一 docker常用命令 1. service docker start 2. docker images        显示所有镜像 3. docker ps [-a]          显示正在运 ...

  10. TOJ3097: 单词后缀 (字典树 or map瞎搞)

    传送门 (<---可以点击的~) 时间限制(普通/Java):1000MS/3000MS     内存限制:65536KByte 描述 有些英语单词后缀都是一样的,现在我们需要从给定的一堆单词里 ...