题解

因为博主退役了,所以题解咕掉了。先放个代码

CODE

#include<bits/stdc++.h>
using namespace std;
const int MAXN = 2005;
int n, ps[MAXN], ans[MAXN], fir[MAXN], to[MAXN<<1], nxt[MAXN<<1], cntE, Mn;
int f[MAXN][MAXN<<1], cnt[MAXN]; bool bf[MAXN<<1], st[MAXN], ed[MAXN];
inline void link(int u, int v) {
to[++cntE] = v; nxt[cntE] = fir[u]; fir[u] = cntE;
to[++cntE] = u; nxt[cntE] = fir[v]; fir[v] = cntE;
}
int find(int u, int x) { return !f[u][x] ? x : f[u][x] = find(u, f[u][x]); }
void dfs(int u, int ff) {
if(ff && !f[u][ff] && !ed[u] && (find(u, 2*n+2) != ff || cnt[u] == 1)) Mn = min(Mn, u);
for(int i = fir[u]; i; i = nxt[i]) if(i^ff)
if( (!ff && !st[u] && !bf[i] && (find(u, i) != 2*n+3 || cnt[u] == 1))
|| (ff && !f[u][ff] && !bf[i] && find(u, i) != ff && (find(u, 2*n+2) != ff || find(u, i) != 2*n+3 || cnt[u] == 2)))
dfs(to[i], i^1);
}
bool mdf(int u, int ff) {
if(u == Mn) { f[u][ff] = 2*n+3, ed[u] = 1; return 1; }
for(int i = fir[u]; i; i = nxt[i]) if((i^ff) && mdf(to[i], i^1)) {
if(!ff) f[u][2*n+2] = i, st[u] = 1, bf[i] = 1;
else f[u][ff] = i, --cnt[u], bf[i] = 1;
return 1;
}
return 0;
}
int main(){
freopen("tree.in","r",stdin);
freopen("tree.out","w",stdout);
int T; scanf("%d", &T);
while(T--) {
memset(f, 0, sizeof f);
memset(bf, 0, sizeof bf);
memset(st, 0, sizeof st);
memset(ed, 0, sizeof ed);
memset(fir, 0, sizeof fir);
memset(cnt, 0, sizeof cnt);
cntE = 1;
scanf("%d",&n);
for(int i = 1; i <= n; ++i) scanf("%d", &ps[i]);
for(int i = 1, x, y; i < n; ++i) scanf("%d%d", &x, &y), ++cnt[x], ++cnt[y], link(x, y);
for(int i = 1; i <= n; ++i) Mn = n, dfs(ps[i], 0), mdf(ps[i], 0), ans[i] = Mn;
for(int i = 1; i <= n; ++i) printf("%d%c", ans[i], " \n"[i==n]);
}
}

CSP2019 D1T3 树上的数 (贪心+并查集)的更多相关文章

  1. 【CSP2019】树上的数

    [CSP2019]树上的数 题面 洛谷 题解 我们设每个点上的编号分别为\(a_1,a_2...a_n\). 10pts ... 菊花 假设现在菊花中心编号是\(rt\),设你依次拆边\((p_1,r ...

  2. POJ 1456 Supermarket(贪心+并查集)

    题目链接:http://poj.org/problem?id=1456 题目大意:有n件商品,每件商品都有它的价值和截止售卖日期(超过这个日期就不能再卖了).卖一件商品消耗一个单位时间,售卖顺序是可以 ...

  3. Codeforces 437D The Child and Zoo(贪心+并查集)

    题目链接:Codeforces 437D The Child and Zoo 题目大意:小孩子去參观动物园,动物园分非常多个区,每一个区有若干种动物,拥有的动物种数作为该区的权值.然后有m条路,每条路 ...

  4. [bzoj3123][sdoi2013森林] (树上主席树+lca+并查集启发式合并+暴力重构森林)

    Description Input 第一行包含一个正整数testcase,表示当前测试数据的测试点编号.保证1≤testcase≤20. 第二行包含三个整数N,M,T,分别表示节点数.初始边数.操作数 ...

  5. poj1456(贪心+并查集)

    题目链接: http://poj.org/problem?id=1456 题意: 有n个商品, 已知每个商品的价格和销售截止日期, 每销售一件商品需要花费一天, 即一天只能销售一件商品, 问最多能买多 ...

  6. POJ - 1456 贪心+并查集

    做法一:直接贪心,按照利润排序,然后直接尽量给每个活动安排到最晚的时间即可.时间复杂度O(n * d)当d都为10000时,很容易超时.由于这题数据比较水,所有贪心未超时. AC代码 #include ...

  7. poj1456 Supermarket 贪心+并查集

    题目链接:http://poj.org/problem?id=1456 题意:有n个物品(0 <= n <= 10000) ,每个物品有一个价格pi和一个保质期di (1 <= pi ...

  8. GYM 101173 F.Free Figurines(贪心||并查集)

    原题链接 题意:俄罗斯套娃,给出一个初始状态和终止状态,问至少需要多少步操作才能实现状态转化 贪心做法如果完全拆掉再重装,答案是p[i]和q[i]中不为0的值的个数.现在要求寻找最小步数,显然要减去一 ...

  9. poj1256(贪心+并查集)

    题目链接:http://poj.org/problem?id=1456 题意:给n件商品的价格和卖出截至时间,每一个单位时间最多只能卖出一件商品,求能获得的最大利润. 思路:首先是贪心,为获得最大利润 ...

随机推荐

  1. python学习-40 生产者和消费者模型

    import time def buy(name): # 消费者 print('%s上街去买蛋' %name) while True: eggs=yield print('%s买了%s' %(name ...

  2. Django 在admin中自定义app名

    前提条件,注册时是: 完整的注册,不是直接用app名进行注册 INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'dj ...

  3. nmap使用帮助翻译

    Nmap 7.60 ( https://nmap.org )Usage: nmap [扫描类型] [操作] {目标说明}目标说明:  可以识别主机名.IP地址.网络,等等.  例如: scanme.n ...

  4. 全面优化MySQL

    MySQL性能瓶颈原因 硬件.系统因素 CPU 磁盘I/O 网络性能 操作系统争用 MySQL相关因素 数据库设计 索引.数据类型 应用程序性能 特定请求.短时事务 配置变量 缓冲区.高速缓存.Inn ...

  5. 《MySQL数据库从入门到精通》 高级运维人才的必备书籍

    众所周知,每年就业市场都会迎来千万量级的高校毕业生,然而企业招工难和毕业生就业难的矛盾却一直没有得到很好地解决.究其原因,主要矛盾还是在于传统的学历教育与企业实际需求相脱节.为了杜绝高校毕业生求职时常 ...

  6. 网络地址转换(NAT)

    NAT是解决ipv4地址短缺的方案之一 NAT是将位于子网中的主机与外网连通,子网中所有的主机都可以通过路由器的网络地址转换访问外网.对于外网来说该路由器相当于一台完整的主机,子网内所有主机对外网的访 ...

  7. Scala Actor入门

    介绍 Scala的Actor类似于Java中的多线程编程.但是不同的是,Scala的Actor提供的模型与多线程有所不同.Scala的Actor尽可能地避免锁和共享状态,从而避免多线程并发时出现资源争 ...

  8. java之aop使用及自定义注解

    目的: 1.Java注解简介 2.Java元注解(重点) 3.自定义注解 案例一(获取类与方法上的注解值) 案例二(获取类属性上的注解属性值) 案例三(获取参数修饰注解对应的属性值) 4.Aop自定义 ...

  9. Golang高阶:Golang1.5到Golang1.12包管理

    Golang1.5到Golang1.12包管理 1. 前言 Golang 是一门到如今有十年的静态高级语言了,2009年的时候算是正式推出了,然后到最近的一两年,2017-2018年的时候,突然直线上 ...

  10. 测试人员必须掌握的linu常用命令

    有些公司需要测试人员部署程序包,通过工具xshell. 现在我将总结下工作需要用到的最多的命令 ls                                显示文件或目录 pwd       ...