您当前的位置: 首页 > 

MangataTS

暂无认证

  • 0浏览

    0关注

    423博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

AcWing 4244. 牛的比赛(双向建图BFS)

MangataTS 发布时间:2022-02-19 12:50:52 ,浏览量:0

题目连接

https://www.acwing.com/problem/content/4247/

http://poj.org/problem?id=3660

思路

通过观察样例我们可以发现一个事情,如果说当前的一个点顺着当前建的边走下去加上逆着走下去能覆盖所有的点,那么这个点的一个排名就确定了,为什么呢?我们来思考一下这个操作的含义:

  • 顺着当前建立的边走那么就是找到排名比自己小的人数有多少
  • 逆着当前建立的边走那么就是找到排名比自己大的人数有多少

如果排名比自己大和比自己小的人数全部覆盖了,那么自己当前的排名也就能够知晓了,所以我们正向和反向建边,然后对于每一个点跑一个BFS就好啦,因为边权反正都是1

代码
#include
#include
#include
#include
#include
#include
using namespace std;

const int N = 1e2+10;

int n,m;
vector E[2][N];
bool vis[N];

void bfs(int s,int loc){
	queue que;
	que.push(s);
	while(!que.empty()){
		int t = que.front();
		que.pop();
		if(vis[t]) continue;
		vis[t] = true;
		for(int i = 0,l = E[loc][t].size();i n>>m;
	int u,v;
	for(int i = 1;i >u>>v;
		E[0][u].push_back(v);
		E[1][v].push_back(u);
	}
	int ans = 0;
	for(int i = 1;i             
关注
打赏
1665836431
查看更多评论
1.5826s