拓扑排序 codevs 4040 cojs 438
codevs 4040 EZ系列之奖金
由于无敌的WRN在2015年世界英俊帅气男总决选中胜出,EZ总经理Mr.Lin心情好,决定给每位员工发奖金。EZ决定以每个人本年在EZ的贡献为标准来计算他们得到奖金的多少。
于是Mr.Lin下令召开m方会谈。每位参加会谈的代表提出了自己的意见:“我认为学生a的奖金应该比b高!”Mr.Lin决定要找出一种奖金方案,满足各位代表的意见,且同时使得总奖金数最少。每位学生奖金最少为100元。
第一行两个整数n,m,表示学生总数和代表数;
以下m行,每行2个整数a,b,表示某个代表认为第a号学生奖金应该比第b号学生高。
若无法找到合法方案,则输出“-1”;否则输出一个数表示最少总奖金。
2 1
1 2
201
80%的数据满足n<=1000,m<=2000;
100%的数据满足n<=10000,m<=20000。
1 #include<iostream> 2 #define inf (1<<31)-1 3 using namespace std; 4 #include<cstdio> 5 typedef long long ll; 6 #include<cstring> 7 #define N 10010 8 #include<stack> 9 stack<int>sta; 10 struct Edge{ 11 int v,last; 12 }edge[N<<1]; 13 ll ans=0; 14 int indu[N],head[N],t=0,u,tot=0,v,n,m; 15 void add_edge(int u,int v) 16 { 17 ++t; 18 edge[t].v=v; 19 edge[t].last=head[u]; 20 head[u]=t; 21 } 22 int read() 23 { 24 int sum=0,ff=1;char s; 25 s=getchar(); 26 while(s<'0'||s>'9') 27 { 28 if(s=='-') ff=-1; 29 s=getchar(); 30 } 31 while('0'<=s&&s<='9') 32 { 33 sum=sum*10+s-'0'; 34 s=getchar(); 35 } 36 return sum*ff; 37 } 38 void input() 39 { 40 n=read();m=read(); 41 for(int i=1;i<=m;++i) 42 { 43 v=read();u=read(); 44 add_edge(u,v); 45 indu[v]++; 46 } 47 } 48 bool toposort() 49 { 50 int mon=0; 51 while(tot<n) 52 { 53 for(int i=1;i<=n;++i) 54 { 55 if(!indu[i]) 56 { 57 ans+=100+mon; 58 sta.push(i); 59 indu[i]=inf; 60 tot++; 61 } 62 } 63 if(sta.empty()) return false; 64 while(!sta.empty()) 65 { 66 int topt=sta.top(); 67 sta.pop(); 68 for(int l=head[topt];l;l=edge[l].last) 69 { 70 indu[edge[l].v]--; 71 } 72 } 73 mon++; 74 } 75 return true; 76 } 77 int main() 78 { 79 input(); 80 if(toposort()) 81 { 82 cout<<ans<<endl; 83 } 84 else printf("-1\n"); 85 return 0; 86 }
cojs 438. 烦人的幻灯片
★☆ 输入文件:slides.in
输出文件:slides.out
简单对比
时间限制:1 s 内存限制:128 MB
李教授将于今天下午作一次非常重要的演讲。不幸的是他不是一个非常爱整洁的人,他把自己演讲要用的幻灯片随便堆在了一起。因此,演讲之前他不得不去整理这些幻灯片。做为一个讲求效率的学者,他希望尽可能简单地完成它。教授这次演讲一共要用n张幻灯片(n≤26),这n张幻灯片按照演讲要使用的顺序已经用数字l,2,…,n在上面编了号。因为幻灯片是透明的,所以我们不能一下子看清每一个数字所对应的幻灯片。
现在我们用大写字母A,B,C,…再次把幻灯片依次编号。你的任务是编写一个程序,把幻灯片的数字编号和字母编号对应起来,显然这种对应应该是惟一的;若是出现多种对应的情况或是某些数字编号和字母编号对应不起来,我们就称对应是无法实现的。
再接下来的n行依次为n个数字编号的坐标x,y,显然在幻灯片之外是不会有数字的。
输 入
4
6 22 10 20
4 18 6 16
8 20 2 18
10 24 4 8
9 15
19 17
11 7
21 11
输 出
A 4
B 1
C 2
D 3
1 #define N 30 2 #include<vector> 3 #include<iostream> 4 using namespace std; 5 #include<cstdio> 6 #include<algorithm> 7 struct Edge{ 8 int u; 9 vector<int>a; 10 bool operator <(const Edge&p) 11 const{return a.size()<p.a.size();} 12 }bh[N]; 13 struct Kp{ 14 int x1,x2,y1,y2; 15 }kp[N]; 16 int flag[N],t=0,tot=0,n; 17 void input() 18 { 19 scanf("%d",&n); 20 for(int i=1;i<=n;++i) 21 { 22 scanf("%d%d%d%d",&kp[i].x1,&kp[i].x2,&kp[i].y1,&kp[i].y2); 23 } 24 // memset(flag,0,sizeof(flag)); 25 } 26 void add_edge(int u,int v) 27 { 28 bh[u].u=u; 29 bh[u].a.push_back(v); 30 } 31 void add() 32 { 33 int xi,xa,yi,ya; 34 for(int i=1;i<=n;++i) 35 { 36 scanf("%d%d",&xi,&yi); 37 for(int j=1;j<=n;++j) 38 { 39 if(xi>=kp[j].x1&&xi<=kp[j].x2&&yi>=kp[j].y1&&yi<=kp[j].y2) 40 { 41 add_edge(i,j); 42 } 43 } 44 } 45 } 46 int main() 47 { 48 freopen("slides.in","r",stdin); 49 freopen("slides.out","w",stdout); 50 input(); 51 add(); 52 sort(bh+1,bh+n+1); 53 for(int i=1;i<=n;++i) 54 { 55 for(int j=0;j<bh[i].a.size();++j) 56 { 57 if(flag[bh[i].a[j]]==0) 58 { 59 int temp=bh[i].a[j]; 60 flag[bh[i].a[j]]=bh[i].u; 61 tot++; 62 break; 63 } 64 } 65 } 66 int tbflag[N]={0}; 67 for(int i=1;i<=n;++i) 68 { 69 for(int j=bh[i].a.size()-1;j>=0;--j) 70 { 71 if(tbflag[bh[i].a[j]]==0) 72 { 73 int temp=bh[i].a[j]; 74 tbflag[bh[i].a[j]]=bh[i].u; 75 break; 76 } 77 } 78 } 79 bool fla=true; 80 for(int i=1;i<=n;++i)/*再反着做一次,是确保结果唯一的*/ 81 { 82 if(tbflag[i]!=flag[i]) 83 { 84 fla=false;break; 85 } 86 } 87 if(tot==n&&fla) 88 { 89 for(int i=1;i<=n;++i) 90 { 91 printf("%c %d\n",i+'A'-1,flag[i]); 92 } 93 } 94 else { 95 printf("None\n"); 96 } 97 fclose(stdin);fclose(stdout); 98 return 0; 99 }
转载于:https://www.cnblogs.com/c1299401227/p/5559000.html
拓扑排序 codevs 4040 cojs 438相关推荐
- codevs奇怪的梦境(拓扑排序)
拓扑排序练一发,思想在poj2367中写了 #include <cstdio> #include <iostream> #include <cstring> #in ...
- 【图论】有向无环图的拓扑排序
1. 引言 有向无环图(Directed Acyclic Graph, DAG)是有向图的一种,字面意思的理解就是图中没有环.常常被用来表示事件之间的驱动依赖关系,管理任务之间的调度.拓扑排序是对DA ...
- C#实现有向无环图(DAG)拓扑排序
对一个有向无环图(Directed Acyclic Graph简称DAG)G进行拓扑排序,是将G中所有顶点排成一个线性序列,使得图中任意一对顶点u和v,若边(u,v)∈E(G),则u在线性序列中出现在 ...
- hdu 5438 Ponds 拓扑排序
Ponds Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/contests/contest_showproblem ...
- usaco frame up(所有拓扑排序的输出)
先根据图建图再拓扑排序. /** ID: jinbo wu TASK: frameup LANG:C++ */ #include<bits/stdc++.h> using namespac ...
- HDU1811 Rank of Tetris 拓扑排序+并查集 OR 差分约束最短路+并查集
题目链接 题意:就是给你一堆关系,看能不能排出个确定的顺序 做法: 1. 拓扑排序+并查集 应该很容易想到的一种思路,大于小于建立单向边.对于相等的呢,就把他们缩成一个点.就用并查集缩成一个点就行了 ...
- C/C++二级指针概念及应用(有向图的邻接表(拓扑排序)、有向网图的邻接表、树的孩子表示)
目录 一.概述 例1: 例2: 代码: 二.实例 1.有向图的邻接表(拓扑排序) 2.有向网图的邻接表 3.树的孩子表示 一.概述 二级指针:指向指针的指针.一般需要修改地址的时候会用到二级指针. 注 ...
- 极小连通子图和极大连通子图_强连通分量与拓扑排序
前言 由于GacUI里面开始多处用上拓扑排序,我决定把之前瞎JB搞出来的算法换掉,换成个正式的.之前我自己弄了个写起来很简单的算法,然后每一处需要用到的地方我就重新做一遍.当然这样肯定也是不行的,我觉 ...
- 图论之拓扑排序 poj 2367 Genealogical tree
题目链接 http://poj.org/problem?id=2367 题意就是给定一系列关系,按这些关系拓扑排序. #include<cstdio> #include<cstrin ...
- 用拓扑排序检测有向图中是否有环
目录 算法主要步骤 代码 测试数据 提示:由于拓扑排序的检测方式不涉及到边权或点权,所以拓扑序列中的正环和负环都能够被检测出来.检测可达负环可以用Bellman-Ford或者SPFA. 算法主要步骤 ...
最新文章
- C++ 指向常量的指针与指针类型的常量
- 《剑指offer》序列化二叉树
- vsflexgrid单元格换行后自动使用行高_Excel表格不会换行?10个超实用Excel小技巧,用了都说好!...
- 软件包管理器(树链剖分)
- C++ class实现顺序队列(完整代码)
- python安装不了jupyter_python学习笔记——Windowns下Python3之安装jupyter
- poj3616 基础的动态规划算法 《挑战程序设计竞赛》
- mysql优化-面试题
- mac pycharm安装设置_入门python,这样操作,简单易学(安装教程)
- 如何在《救赎之路》中使用CPU粒子效果
- 计算机c语言程序设计题,《计算机C语言程序设计》模拟题集.doc
- [python爬虫小实战2]根据用户输入关键词爬取今日头条图集,并批量下载图片
- java毕业设计_基于MVC的公司报账系统
- 会计专业与计算机专业结合复合型,我国会计电算化的现状、问题及对策
- 影视广告之神器Cinema 4D
- 小i机器人要求苹果公司停售iPhone产品
- 程序员如何缓解压力,保持心理健康(转)
- unzip 命令指定解压路径
- Android自定义控件 - 彩虹表盘
- 5.2 我们要什么样的知识和能力结构?——《逆袭大学》连载