#拓扑排序#洛谷 5157 [USACO18DEC]The Cow Gathering P
题目
给出一棵树和一些限制关系 \((a_i,b_i)\),
一种合法的删点序列当且仅当删除一个点之后树的大小不超过 1 或不存在孤立点,
并且 \(a_i\) 要比 \(b_i\) 先删除,问 \(\forall x\in [1,n]\),是否可能为合法删点序列的末项
分析
考虑到限制就是 \(a_i\) 不包含 \(b_i\) 的那些子树包括 \(a_i\) 本身不可能为末项。
并且如果有一个点可能为末项,那么与其不通过被限制的点相连的也可以成为末项。
所以只要找到一个合法的末项即可,如果没有限制随便挑一个就行了。
考虑把限制看成单向边,每次把所谓的叶子加进队列,
如果叶子发现度数为 0 说明无论限制还是树均被满足,那么它就可以成为末项
代码
#include <cstdio>
#include <cctype>
#include <vector>
using namespace std;
const int N=100011;
struct node{int y,next;}e[N<<1]; vector<int>G[N];
int as[N],ans[N],q[N],head=1,tail,deg[N],n,et=1,m,rt;
int iut(){
int ans=0; char c=getchar();
while (!isdigit(c)) c=getchar();
while (isdigit(c)) ans=ans*10+c-48,c=getchar();
return ans;
}
int Topsort(){
for (int i=1;i<=n;++i)
if (deg[i]==1) q[++tail]=i;
while (head<=tail){
int x=q[head++];
if (deg[x]<1) return x;
for (int i=as[x];i;i=e[i].next)
if (--deg[e[i].y]==1) q[++tail]=e[i].y;
for (int i=0;i<(int)G[x].size();++i)
if (--deg[G[x][i]]==1) q[++tail]=G[x][i];
}
return tail==n;
}
void dfs(int x){
ans[x]=1;
for (int i=as[x];i;i=e[i].next)
if (!ans[e[i].y]) dfs(e[i].y);
}
int main(){
n=iut(),m=iut();
for (int i=1;i<n;++i){
int x=iut(),y=iut();
e[++et]=(node){y,as[x]},as[x]=et,++deg[x];
e[++et]=(node){x,as[y]},as[y]=et,++deg[y];
}
for (int i=1;i<=m;++i){
int x=iut(),y=iut();
G[x].push_back(y);
ans[x]=-1,++deg[y];
}
rt=Topsort();
if (!rt){
for (int i=1;i<=n;++i)
putchar(48),putchar(10);
return 0;
}
dfs(rt);
for (int i=1;i<=n;++i,putchar(10))
if (ans[i]==1) putchar(49);
else putchar(48);
return 0;
}
#拓扑排序#洛谷 5157 [USACO18DEC]The Cow Gathering P的更多相关文章
- 洛谷 P2986 [USACO10MAR]Great Cow Gat…(树形dp+容斥原理)
P2986 [USACO10MAR]伟大的奶牛聚集Great Cow Gat… 题目描述 Bessie is planning the annual Great Cow Gathering for c ...
- P5157 [USACO18DEC]The Cow Gathering
首先考虑怎么check一个点是否能被最后一个删除. 可以这么建图,以这个点建有根树,边全部向上指,再加上剩下的有向边. 很明显,这里的一条边的定义就变成了只有删去这个点,才可以删去它指向的点. 因此, ...
- [USACO18DEC]The Cow Gathering P
首先可以思考一下每次能删去的点有什么性质. 不难发现,每次能删去的点都是入度恰好为 \(1\) 的那些点(包括 \(a_i \rightarrow b_i\) 的有向边). 换句话说,每次能删去的点既 ...
- 洛谷P1472 奶牛家谱 Cow Pedigrees
P1472 奶牛家谱 Cow Pedigrees 102通过 193提交 题目提供者该用户不存在 标签USACO 难度普及+/提高 提交 讨论 题解 最新讨论 暂时没有讨论 题目描述 农民约翰准备 ...
- 洛谷 P2888 [USACO07NOV]牛栏Cow Hurdles
题目戳 题目描述 Farmer John wants the cows to prepare for the county jumping competition, so Bessie and the ...
- AC日记——双栈排序 洛谷 P1155
双栈排序 思路: 二分图染+模拟: 代码: #include <bits/stdc++.h> using namespace std; #define maxn 1005 #define ...
- 洛谷P2888 [USACO07NOV]牛栏Cow Hurdles
题目描述 Farmer John wants the cows to prepare for the county jumping competition, so Bessie and the gan ...
- [洛谷P2886] 牛继电器Cow Relays
问题描述 For their physical fitness program, N (2 ≤ N ≤ 1,000,000) cows have decided to run a relay race ...
- 洛谷P5155 [USACO18DEC]Balance Beam(期望,凸包)
你以为它是一个期望dp,其实它是一个凸包哒! 设平衡木长度为\(L\),把向右走平衡木那个式子写一下: \[dp[i]=\frac{dp[i+1]+dp[i-1]}{2}\] 然后会发现这是一个等差数 ...
- 洛谷P5156 [USACO18DEC]Sort It Out
这题就是让你求字典序第k小的最短乱序子序列 转换一下,其实就是字典序第k大的最长上升子序列 就统计一下以i结尾的最长上升子序列\(f[i]\),长度为i的上升子序列的开头组成的集合\(v[i]\),转 ...
随机推荐
- Array.forEach() 与 Array.map()这些方法的第三个可选参数 array 的作用
说明 let thisArray = [] thisArray.forEach((item, index, array)=>{ //为什么要有array,而不是直接用thisArray? }) ...
- logback 常用配置(详解)
转自:https://blog.csdn.net/qq_36850813/article/details/83092051 官方文档参考:https://logback.qos.ch/manual/a ...
- 标准运算符替代函数之operator模块
# 官网参考示例地址 https://docs.python.org/zh-cn/3/library/operator.html # operator模块提供了一套与python的内置的运算符对应的高 ...
- Volatile关键字原理
转载请标明:https://www.cnblogs.com/tangZH/p/15113505.html 一.如果一个变量被volatile关键字修饰,那么所有线程都是可见的.所谓可见就是,当一条线程 ...
- STL-vector模拟实现
#pragma once #include<assert.h> #include<iostream> using std::cout; using std::endl; usi ...
- cpu过高什么原因?怎么排查?
运行大型程序或应用程序:当计算机运行大型程序或应用程序时,CPU需要处理更多的数据和指令,因此CPU占用率会相应地增加. 病毒或恶意软件:某些病毒或恶意软件会占用计算机的CPU资源来执行恶意任务,例如 ...
- Jmeter中属性跟变量的区别?
Jmeter属性全局生效,变量局部生效,jmeter属性默认读取jmeter.properties中的属性配置,在jmeter运行过程中,通过函数${_setProperty(属性名,属性值)来定义 ...
- CodeCraft-22 and Codeforces Round 795 (Div. 2)C. Sum of Substrings(分类讨论、贪心)
感觉分类讨论的能有点弱.遇到复杂一点的分类讨论的题目,代码就写的巨长. 首先观察到处在中间位置的1对答案的贡献是11,具体在中间哪个位置是没有关系的. 只有两端的两个位置是比较特殊的 \(1位置处的1 ...
- 离线部署-docker
离线部署---docker 关键词:docker离线部署,images离线安装,docker compose,shell,minio docker离线安装 docker install offline ...
- Zabbix“专家坐诊”第190期问答汇总
问题一 Q:请问为啥用拓扑图监控交换机接口流量,获取不到数据,显示未知,键值也没错 ,最新数据也能看到,是什么原因呢? A:把第一个值改成主机名. 问题二 Q:请问下zabbix server 有什么 ...