hpu暑假训练【拓扑解题思路以及模板】
来源:互联网 发布:金融行业seo 编辑:程序博客网 时间:2024/05/29 02:02
/*输入:n m ,n表示有多少人,m表示有多少对关系 x y,表示,x是y的上级 输出:最低工资 ,无解输出-1 */#include<cstdio>#include<queue>#include<algorithm>using namespace std;#define fi first#define se secondint in[105];//入度 vector<int> edge[105];int n,m;int topo(){int ans = 0;//pair : 第一个存点,第二个存等级 queue<pair<int,int> > Q;for (int i = 1 ; i <= n ; i++)//统计入度为0的点 {if (in[i] == 0){Q.push(make_pair(i,0));in[i] = -1;//表示点已经取走 }}while (!Q.empty()){int pos = Q.front().fi;int base = Q.front().se;ans += 1000 + base;//取出点以后计算工资 Q.pop();for (int i = 0 ; i < edge[pos].size() ; i++)//查找与之相连的边,删除并更新入度 {int ne = edge[pos][i];in[ne]--;if (in[ne] == 0) {Q.push(make_pair(ne,base+1));in[ne] = -1;//取走 }}}for (int i = 1 ; i <= n; i++)//最后一次搜索图,判断是否存在环 {if (in[i] != -1)return -1;}return ans;}int main(){scanf ("%d%d",&n,&m);for (int i = 1 ; i <= n ; i++){in[i] = 0;edge[i].clear();}for (int i = 1 ; i <= m ; i++){int x,y;scanf ("%d%d",&x,&y);in[x]++;edge[y].push_back(x);}printf ("%d\n",topo());return 0;}
阅读全文
1 0
- hpu暑假训练【拓扑解题思路以及模板】
- hpu暑假训练 【最小生成树解题思路以及模板】
- hpu暑假训练【最短路思路以及模板】
- hpu暑假训练G
- hpu暑假训练B
- hpu暑假训练C
- hpu暑假训练C
- hpu暑假训练F
- hpu暑假训练G
- hpu暑假训练I
- hpu暑假训练H
- hpu暑假训练A
- hpu暑假训练D
- hpu暑假训练A
- hpu暑假训练 B
- hpu暑假训练 C
- hpu暑假训练 E
- hpu暑假训练 G
- android wifi连接开发实例
- hdu4373 lucas定理+中国剩余定理
- Linux_磁盘加密,阵列和LVM
- 步步深入:java.util.Arrays.sort
- 关于编译器的问题
- hpu暑假训练【拓扑解题思路以及模板】
- J2se 图形界面之布局设计
- 生殖与遗传
- hdu 1872 稳定排序
- pywin32 copy excel sheet阻点经验
- LeetCode 572 Subtree of Another Tree
- 一个故事讲清楚 NIO
- 51nod 1239 欧拉函数之和
- POJ 2175 Evacuation Plan(网络流消负圈算法)