HDU 1285-确定比赛名次 ( 拓扑排序)

HDU 1285-确定比赛名次 ( 拓扑排序)

题意:给若干比赛结果,按字典序输出比赛排名

思路:拓扑排序,利用BFS建立结点关系。

时间复杂度:O(V+E)

代码

#include<bits/stdc++.h>
using namespace std;
const int N=5e2+5;
int in[N],n,m,u,v,now;
int g[N][N];
#define mst(a) memset(a,0,sizeof a)
void toposort(){//拓扑排序 
	priority_queue<int,vector<int>,greater<int> >q;//优先队列输出最小编号 
	for(int i=1;i<=n;i++) if(!in[i]) q.push(i);//入度为0的点入队 
	int c=1;//控制输出格式 
	while(q.size()){
		now=q.top();q.pop();
		if(c!=n) printf("%d ",now),c++;
		else printf("%d\n",now);
		for(int i=1;i<=n;i++)
			if(g[now][i]) //相邻点入度减1 
			{
				in[i]--;
				if(!in[i]) q.push(i);
			} 
	} 
}
int main(){
	while(cin>>n>>m){
		mst(in),mst(g);//初始化 
		while(m--){
			cin>>u>>v;
			if(!g[u][v])//防止重边影响入度. 
			g[u][v]=1,in[v]++;
		}
		toposort();
	}
	return 0;
} 
全部评论

相关推荐

头像
04-17 09:29
已编辑
湖南农业大学 后端
睡姿决定发型丫:本硕末9也是0offer,简历挂了挺多,只有淘天 美团 中兴给了面试机会,淘天二面挂,美团一面kpi面,中兴一面感觉也大概率kpi(虽然国企,但一面0技术纯聊天有点离谱吧)
点赞 评论 收藏
分享
白火同学:大二有这水平很牛了,可以适当对关键信息加粗一点,比如关键技术、性能指标之类的。
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务