【BAPC 2016】 C. Brexit BFS(拓扑排序)

本文介绍了BAPC 2016竞赛中的一道题目,涉及国家间的贸易关系和拓扑排序。当某个国家决定退出联盟后,其他依赖其贸易的国家可能会相继退出。你需要确定你的国家是否也会离开。输入包含国家数量、贸易伙伴关系、你的国家编号和首个退出的国家。通过遍历并消除贸易关系,使用BFS判断是否超过一半的贸易伙伴离开,从而预测你的国家会“留下”还是“离开”。示例给出了不同情况下的输入和输出。
摘要由CSDN通过智能技术生成

A long time ago in a galaxy far, far away, there was a large interstellar trading union, consisting
of many countries from all across the galaxy. Recently, one of the countries decided to leave
the union. As a result, other countries are thinking about leaving too, as their participation
in the union is no longer beneficial when their main trading partners are gone. Picture by NASA
You are a concerned citizen of country X, and you want to find out whether your country will
remain in the union or not. You have crafted a list of all pairs of countries that are trading
partners of one another. If at least half of the trading partners of any given country Y leave
the union, country Y will soon follow. Given this information, you now intend to determine
whether your home country will leave the union.
Input
The input starts with one line containing four space separated integers C, P, X, and L. These
denote the total number of countries (2 ≤ C ≤ 200 000), the number of trading partnerships
(1 ≤ P ≤ 300 000), the number of your home country (1 ≤ X ≤ C) and finally the number
of the first country to leave, setting in motion a chain reaction with potentially disastrous
consequences (1 ≤ L ≤ C).
This is followed by P lines, each containing two space separated integers Ai and Bi satisfying
1 ≤ Ai < Bi ≤ C. Such a line denotes a trade partnership between countries Ai and Bi
. No
pair of countries is listed more than once.
Initially, every country has at least one trading partner in the union.
Output
For each test case, output one line containing either “leave” or “stay”, denoting whether
you home country leaves or stays in the union.
8 Problem C: Brexit
Sample Input 1 Sample Output 1
4 3 4 1 stay
2 3
2 4
1 2
Sample Input 2 Sample Output 2
5 5 1 1 leave
3 4
1 2
2 3
1 3
2 5
Sample Input 3 Sample Output 3
4 5 3 1 stay
1 2
1 3
2 3
2 4
3 4
Sample Input 4 Sample Output 4
10 14 1 10 leave
1 2
1 3
1 4
2 5
3 5
4 5
5 6
5 7
5 8
5 9
6 10
7 10
8 10
9 10

题意:每个人有若干个搭档,一开始整个团队只离开一个人,若一个人一半的搭档都走了,他也会走。现在问你某个人会不会离开

思路:

其实就类似拓扑排序,先消除第一个人连的边,然后看有无满足题意的,有的话进队,同样操作至队空或者碰到题给的那个编号。

AC代码:

#include<iostream>
#include<string>
#include<algorithm>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<map>
#include <queue>
#include<sstream>
#include <stack>
#include <set>
#include <bitset>
#include<vector>
#define FAST ios::sync_with_stdio(false)
#define abs(a) ((a)>=0?(a):-(a))
#define sz(x) ((int)(x).size())
#define all(x) (x).begin(),(x).end()
#define mem(a,b) memset(a,b,sizeof(a))
#define max(a,b) ((a)>(b)?(a):(b))
#define min(a,b) ((a)<(b)?(a):(b))
#define rep(i,a,n) for(int i=a;i<=n;++i)
#define per(i,n,a) for(int i=n;i>=a;--i)
#define pb push_back
#define mp make_pair
#define fi first
#define se second
using namespace std;
typedef long 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值