Gym

来源:互联网 发布:淘宝fake鞋店 编辑:程序博客网 时间:2024/06/07 02:15

题目链接:https://vjudge.net/problem/Gym-101490C
题意:有C个星球,有P条贸易关系,从而组成了一个贸易联盟,你所在的星球是X,现在慢慢的有人脱离贸易关系,第一个脱离的是L,对于一个星球来说,如果在某一些星球脱离贸易关系的影响下,如果现在贸易关系小于之前的一半,那么这个星球也会脱离贸易关系,问你你的星球最后脱离贸易关系没有
解析:建图,记录一下度数,然后把l星球入队,每次从队列出来的就是脱离的星球,然后和他相连的星球度数-1,然后把接下来要脱离的星球入队,如果出队元素等于x星球,就输出leave,否则输出stay

#include <bits/stdc++.h>using namespace std;const int maxn = 1e6+100;vector<int>G[maxn];int du[maxn];int lost[maxn];int main(void){    int c,p,x,l;    scanf("%d %d %d %d",&c,&p,&x,&l);    for(int i=0;i<p;i++)    {        int x,y;        scanf("%d %d",&x,&y);        G[x].push_back(y);        G[y].push_back(x);        du[x]++;        du[y]++;    }    queue<int>q;    q.push(l);    int flag = 1;    while(!q.empty())    {        int u = q.front();        q.pop();        if(u==x)        {            flag = 0;            puts("leave");            break;        }        for(int i=0;i<(int)G[u].size();i++)        {            int v = G[u][i];            lost[v]++;            if(lost[v]*2>=du[v])                q.push(v);        }    }    if(flag)        puts("stay");    return 0;}
原创粉丝点击