Codeforces 1368E - Ski Accidents(构造+思维)
神仙构造题(不过可能我构造太烂了?)
首先考虑这个奇奇怪怪的 \(\dfrac{4}{7}\),以及这个每个点出度最多为 \(2\) 的条件有何用意。容易发现 \(4=2^2,7=1+2+4\),这启发我们通过某种方式将原图的点集分成三部分。我们考虑构造三个点集 \(A,B,C\) 满足:
- 对于 \(A\) 中的点 \(x\),要么其入度为 \(0\),要么所有连向它的边的另一个端点都属于 \(C\)
- 对于 \(B\) 中的点 \(x\),满足不存在一条边 \((y,x),s.t.y\in B\),且至少存在一条边 \((y,x),s.t.y\in A\)
- 对于 \(C\) 中的点 \(x\),满足至少存在一条边 \((y,x),s.t.y\in B\)。
显然对于任意 \(v\in V\),\(v\) 必然属于 \(A,B,C\) 之一,因此这是一个合法的划分。我们考虑一遍拓扑排序求出 \(col_x\) 表示点 \(x\) 属于 \(A,B,C\) 哪个集合(\(0\) 表示 \(A\),\(1\) 表示 \(B\),\(2\) 表示 \(C\)),然后取 \(col_x=2\) 的点作为答案即可。
为什么?首先我们要说明 \(|C|\le\dfrac{4}{7}n\),不难发现由于每个点度最多为二,因此每个 \(A\) 中的点最多可以产生 \(2\) 个 \(B\) 中的点,因此 \(|B|\le 2|A|\),每个 \(B\) 中的点也最多对应 \(2\) 个 \(C\) 中的点,因此 \(|C|\le 2|B|\),故 \(|C|\le\dfrac{4}{7}n\)。其次我们要说明删除 \(C\) 中的点之后剩余部分满足最多存在一条路径这个限制,不难发现 \(A\) 中点由于在原图中只存在 \(C\) 中点连向它们的边,现在删除了 \(C\),自然入度为 \(0\),同理 \(B\) 中点出度也为零。显然这样的图最长路径只可能是某个 \(A\) 中的点连到某个 \(B\) 中的点,长度最多为 \(1\),符合要求。
时间复杂度线性。
希望今晚 GLBR 不要在 E 放个这样的人类智慧题
const int MAXN=2e5;
const int MAXM=4e5;
int n,m,hd[MAXN+5],to[MAXM+5],nxt[MAXM+5],ec=0,deg[MAXN+5],col[MAXN+5];
void adde(int u,int v){to[++ec]=v;nxt[ec]=hd[u];hd[u]=ec;}
void clear(){for(int i=1;i<=n;i++) hd[i]=deg[i]=col[i]=0;ec=0;}
void solve(){
scanf("%d%d",&n,&m);clear();
for(int i=1,u,v;i<=m;i++) scanf("%d%d",&u,&v),adde(u,v),deg[v]++;
queue<int> q;for(int i=1;i<=n;i++) if(!deg[i]) q.push(i);
vector<int> res;
while(!q.empty()){
int x=q.front();q.pop();
for(int e=hd[x];e;e=nxt[e]){
int y=to[e];
if(col[x]==1) col[y]=2;
else if(col[x]==0&&!col[y]) col[y]=1;
if(!--deg[y]) q.push(y);
} if(col[x]==2) res.pb(x);
} printf("%d\n",res.size());
for(int x:res) printf("%d ",x);
printf("\n");
}
int main(){
int qu;scanf("%d",&qu);
while(qu--) solve();
return 0;
}
Codeforces 1368E - Ski Accidents(构造+思维)的更多相关文章
- Codeforces 755E:PolandBall and White-Red graph(构造+思维)
http://codeforces.com/contest/755/problem/E 题意:给出n个点和一个距离d,让你在这个n个点的图里面构造一个子图,使得这个子图的直径和补图的直径的较小值为d, ...
- codeforces 454 E. Little Pony and Summer Sun Celebration(构造+思维)
题目链接:http://codeforces.com/contest/454/problem/E 题意:给出n个点和m条边,要求每一个点要走指定的奇数次或者是偶数次. 构造出一种走法. 题解:可能一开 ...
- Codeforces 989 P循环节01构造 ABCD连通块构造 思维对云遮月参考系坐标轴转换
A 直接判存不存在连续的三个包含A,B,C就行 /*Huyyt*/ #include<bits/stdc++.h> #define mem(a,b) memset(a,b,sizeof(a ...
- Educational Codeforces Round 53C(二分,思维|构造)
#include<bits/stdc++.h>using namespace std;const int N=1e6+6;int x[N],y[N];int sx,sy,n;char s[ ...
- Codeforces 232A - Cycles (构造 + 思维)
题目链接: 232A - Cycles(点击打开) 题意: 要构成一个存在 \(k\) 个三元环的图,需要多少个点,输出顶点数 \(n\),并输出图. 题解: 题目中的任何图都可以用 \(90\)~ ...
- Codeforces Gym101503E:XOR-omania(构造+思维)
题目链接 题意 给出m个数b,这些数是由n个数a两两异或组成的,问初始的那n个数分别是多少. 思路 存在多组解的情况...原来是个构造题. 考虑这样一种情况:b1 = a1 ^ a2,b2 = a2 ...
- codeforces 389 D. Fox and Minimal path(构造+思维)
题目链接:https://vjudge.net/contest/175446#problem/J 题解:显然要用最多n个点构成的图要使的得到的最短路条数有1e9次个,显然要有几个数相乘容易想到2的几进 ...
- CF1103C Johnny Solving (Codeforces Round #534 (Div. 1)) 思维+构造
题目传送门 https://codeforces.com/contest/1103/problem/C 题解 这个题还算一个有难度的不错的题目吧. 题目给出了两种回答方式: 找出一条长度 \(\geq ...
- Codeforces Global Round 8 E. Ski Accidents(拓扑排序)
题目链接:https://codeforces.com/contest/1368/problem/E 题意 给出一个 $n$ 点 $m$ 边的有向图,每条边由编号较小的点通向编号较大的点,每个点的出度 ...
随机推荐
- Vulnhub实战-grotesque3靶机👻
Vulnhub实战-grotesque3靶机 靶机地址:http://www.vulnhub.com/entry/grotesque-301,723/ 1.靶机描述 2.主机探测,端口扫描 我们在vm ...
- 使用Servlet前Tomcat介绍
虚拟目录的映射方式:让tomcat服务器自动映射tomcat服务器会自动管理webapps目录下的所有web应用,并把它映射成虚似目录.换句话说,tomcat服务器webapps目录中的web应用,外 ...
- Python使用阿里云OSS服务
Python使用阿里云OSS服务 前言: 在远程搭建了一个平台,通过改远程平台进行数据的采集,需要将数据内容传送至本地进行处理:为了实现该功能,考虑了阿里云的OSS对象储存的服务. 40G包月只需1元 ...
- logstash的安装和简单使用
logstash的安装和简单使用 一.安装 1.下载并解压 2.logstash 一些命令行参数 1.查看帮助信息 2.加载指定pipeline文件路径 3.检测配置文件语法是否有错误 4.热加载pi ...
- 21.10.18 test
可可大神出题,四款有趣的游戏推荐,第四个好玩/se T1 loopers \(\color{green}{100}\) 考虑钦定 \(a_1,a_i\) 的位置,固定左边一坨,那么剩下的一坨的 \(\ ...
- bash执行顺序:alias --> function --> builtin --> program
linux bash的执行顺序如下所示: 先 alias --> function --> builtin --> program 后 验证过程: 1,在bash shell中有内置 ...
- OpenWrt编译问题记录
错误一.config.status: error: cannot find input file: `xmetadataretriever/Makefile.in' configure: creati ...
- GPS与AGPS定位服务
最近客户反馈车子启动从车库开到地面后,机器定位相对OBD内部定位会慢很多. 机器定位主要依赖定位模块 + AGPS辅助定位. 其中定位模块目前主流支持的有以下三种定位系统. 一.GPS(全球定位系统) ...
- POJ 2536 Gopher II(二分图最大匹配)
题意: N只地鼠M个洞,每只地鼠.每个洞都有一个坐标. 每只地鼠速度一样,对于每只地鼠而言,如果它跑到某一个洞的所花的时间小于等于S,它才不会被老鹰吃掉. 规定每个洞最多只能藏一只地鼠. 问最少有多少 ...
- centos7 使用iptables
关闭selinux,不关闭时,iptables不读取配置文件 重启生效 centos7 中默认的防火墙是firewalld,使用iptables需要先关闭firewalld防火墙,安装iptables ...