Gym
来源:互联网 发布:apache 没有访问权限 编辑:程序博客网 时间:2024/06/12 10:10
https://vjudge.net/contest/186932#problem/C
给定一个图。表示一个王国,给你s,代表你的家乡。
t,代表最开始分裂的城市,如果一个城市,和他邻接的一半城市都分裂了,那么他也要分裂。问你能否使你的家乡分裂。
我感觉,dfs我是不太擅长的qwq。直接广搜也是阔以的。
存一下度数,然后邻接的都减一下度数。就酱紫
#include <bits/stdc++.h>using namespace std;const int maxn=2e5+2000;const int maxm=6e5+2000;int du[maxn];bool vis[maxn];int siz[maxn];int m,n,s,t;struct Node{ int to; int next;}node[maxm];int head[maxn];int len;void add(int a,int b){ node[len].to=b; node[len].next=head[a]; head[a]=len++;}void init(){ len=0; memset(head,-1,sizeof(head)); memset(vis,false,sizeof(vis)); memset(du,0,sizeof(du)); memset(siz,0,sizeof(siz));}void sol(int s){ queue<int>q; q.push(s); vis[s]=true; while(!q.empty()){ int u=q.front(); q.pop(); // cout<<u<<endl; for(int i=head[u];i!=-1;i=node[i].next){ int to=node[i].to; du[to]--; } for(int i=head[u];i!=-1;i=node[i].next){ int to=node[i].to; if(du[to]<=siz[to]/2&&vis[to]==false){ vis[to]=true; q.push(to); } } }}int main(){ int a,b; while(~scanf("%d%d%d%d",&m,&n,&t,&s)){ init(); for(int i=0;i<n;i++){ scanf("%d%d",&a,&b); add(a,b); add(b,a); du[a]++,du[b]++; } for(int i=1;i<=m;i++){ siz[i]=du[i]; } sol(s); if(vis[t]) puts("leave"); else puts("stay"); } return 0;}
阅读全文
0 0
- Gym
- Gym
- Gym
- Gym
- Gym
- Gym
- Gym
- Gym
- Gym
- Gym
- Gym
- Gym
- Gym
- Gym
- Gym
- Gym
- Gym
- Gym
- GreenPlum之日常SQL脚本笔记(二)
- LeeCode- Baseball Game
- HTTP个人总结(六)
- 学生信息管理系统总结
- 深度学习日志---------CNN介绍
- Gym
- Java第三周作业(1)
- Python DAG—归简法—拓扑排序
- shell脚本收藏
- Linux下PCI设备驱动程序开发
- MySQL之数据操作
- Dubbo在Spring和Spring Boot中的使用
- C++入门基础知识
- DoDataExchange函数,UpdateData(TRUE)和UpdateData(FALSE)的区别