题目

给出一棵树和一些限制关系 \((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的更多相关文章

  1. 洛谷 P2986 [USACO10MAR]Great Cow Gat…(树形dp+容斥原理)

    P2986 [USACO10MAR]伟大的奶牛聚集Great Cow Gat… 题目描述 Bessie is planning the annual Great Cow Gathering for c ...

  2. P5157 [USACO18DEC]The Cow Gathering

    首先考虑怎么check一个点是否能被最后一个删除. 可以这么建图,以这个点建有根树,边全部向上指,再加上剩下的有向边. 很明显,这里的一条边的定义就变成了只有删去这个点,才可以删去它指向的点. 因此, ...

  3. [USACO18DEC]The Cow Gathering P

    首先可以思考一下每次能删去的点有什么性质. 不难发现,每次能删去的点都是入度恰好为 \(1\) 的那些点(包括 \(a_i \rightarrow b_i\) 的有向边). 换句话说,每次能删去的点既 ...

  4. 洛谷P1472 奶牛家谱 Cow Pedigrees

    P1472 奶牛家谱 Cow Pedigrees 102通过 193提交 题目提供者该用户不存在 标签USACO 难度普及+/提高 提交  讨论  题解 最新讨论 暂时没有讨论 题目描述 农民约翰准备 ...

  5. 洛谷 P2888 [USACO07NOV]牛栏Cow Hurdles

    题目戳 题目描述 Farmer John wants the cows to prepare for the county jumping competition, so Bessie and the ...

  6. AC日记——双栈排序 洛谷 P1155

    双栈排序 思路: 二分图染+模拟: 代码: #include <bits/stdc++.h> using namespace std; #define maxn 1005 #define ...

  7. 洛谷P2888 [USACO07NOV]牛栏Cow Hurdles

    题目描述 Farmer John wants the cows to prepare for the county jumping competition, so Bessie and the gan ...

  8. [洛谷P2886] 牛继电器Cow Relays

    问题描述 For their physical fitness program, N (2 ≤ N ≤ 1,000,000) cows have decided to run a relay race ...

  9. 洛谷P5155 [USACO18DEC]Balance Beam(期望,凸包)

    你以为它是一个期望dp,其实它是一个凸包哒! 设平衡木长度为\(L\),把向右走平衡木那个式子写一下: \[dp[i]=\frac{dp[i+1]+dp[i-1]}{2}\] 然后会发现这是一个等差数 ...

  10. 洛谷P5156 [USACO18DEC]Sort It Out

    这题就是让你求字典序第k小的最短乱序子序列 转换一下,其实就是字典序第k大的最长上升子序列 就统计一下以i结尾的最长上升子序列\(f[i]\),长度为i的上升子序列的开头组成的集合\(v[i]\),转 ...

随机推荐

  1. Go微服务框架go-kratos实战学习08:负载均衡基本使用

    微服务框架 go-kratos 中负载均衡使用 一.介绍 在前面这篇文章 负载均衡和它的算法介绍,讲了什么是负载均衡以及作用.算法介绍. go-kratos 的负载均衡主要接口是 Selector,它 ...

  2. [攻防世界][Reverse]xxxorrr

    将目标文件拖入IDA 反汇编main函数 __int64 __fastcall main(int a1, char **a2, char **a3) { int i; // [rsp+Ch] [rbp ...

  3. Java缓存框架整理

    Spring Cache 为基于Spring框架的应用提供了一套完整的缓存API抽象,具体的缓存实现可以对接如Ehcache,Redis等. https://docs.spring.io/spring ...

  4. .NET Core 引发的异常:“sqlsugar.sqlsugarexception” 位于 system.private.corelib.dll 中

    运行一个.NET Core 项目 报错:引发的异常:"sqlsugar.sqlsugarexception" 位于 system.private.corelib.dll 中 . 我 ...

  5. 使用原生 cookieStore 方法,让 Cookie 操作更简单

    前言 对于前端来讲,我们在操作cookie时往往都是基于document.cookie,但它有一个缺点就是操作复杂,它并没有像localStorage那样提供一些get或set等方法供我们使用.对与c ...

  6. iOS APP包瘦身,你在工作中真的会关注吗?

    安装包组成 谈到 App 瘦身,最直接的想法莫过于分析一个安装包内部结构,了解其每一部分的来源.解压一个 ipa 包,拿到其 payload 中 app 文件的数据,整理归类后其大致如下: Exect ...

  7. maven创建父子工程

    目录 创建父工程 创建子工程 将项目编译为eclipse项目 将项目导入eclipse 修改依赖关系:service依赖dao,web依赖service JavaProject的pom.xml文件说明 ...

  8. Linux Cheat Sheet

  9. 【教程】navicat配合HTTP通道远程连接SQLite数据库

    前言 缘由 好奇的我想查看服务器上宝塔面板的SQLite数据库 久别一月,特来水文.起因是我看到服务器上搭建的宝塔面板,好奇其中使用的SQLite数据库,想用navicat远程连接看一下,奈何不会玩, ...

  10. 调试分析 Linux 0.00 多任务切换

    当执行完 system_interrupt 函数,执行 153 行 iret 时,记录栈的变化情况. 任务0在刚进入system_interrupt函数时(调用中断int 0x80处理程序),栈空间为 ...