CF1263F
题目描述
给出一个类似这样

的图,求删掉最多的黑边使得每个特殊点和至少一个节点1连通
保证上下两棵树都存在一种dfs序使得访问特殊点的顺序为1~n
题解
设f[i][j]表示上面的树最后一个特殊点为i,j同理的最小选取数
每次加上lca-->max(i,j)+1的路径,由于题目保证了dfs顺序,所以不会出现不合法的情况
code
#include <algorithm>
#include <iostream>
#include <cstdlib>
#include <cstring>
#include <cstdio>
#define fo(a,b,c) for (a=b; a<=c; a++)
#define fd(a,b,c) for (a=b; a>=c; a--)
#define min(a,b) (a<b?a:b)
#define max(a,b) (a>b?a:b)
using namespace std;
int a[10001][2];
int ls[5001];
int fa[2][5001][11];
int d[2][5001];
int f[1001][1001];
int n,A,B,i,j,k,l,len,ans;
void New(int x,int y)
{
++len;
a[len][0]=y;
a[len][1]=ls[x];
ls[x]=len;
}
void dfs(int type,int t)
{
int i;
fo(i,1,10)
fa[type][t][i]=fa[type][fa[type][t][i-1]][i-1];
if (t<=n) return;
for (i=ls[t]; i; i=a[i][1])
{
fa[type][a[i][0]][0]=t;
d[type][a[i][0]]=d[type][t]+1;
dfs(type,a[i][0]);
}
}
void swap(int &x,int &y)
{
int z=x;
x=y;
y=z;
}
int lca(int type,int x,int y)
{
int i;
if (!x)
{
if (!type)
return n+1;
else
return n+A+1;
}
if (d[type][x]<d[type][y]) swap(x,y);
fd(i,10,0)
if (d[type][fa[type][x][i]]>=d[type][y])
x=fa[type][x][i];
fd(i,10,0)
if (fa[type][x][i]!=fa[type][y][i])
x=fa[type][x][i],y=fa[type][y][i];
if (x!=y)
x=fa[type][x][0];
return x;
}
int main()
{
// freopen("f.in","r",stdin);
scanf("%d",&n);
scanf("%d",&A);
fo(i,2,A)
{
scanf("%d",&j);
New(j+n,i+n);
}
fo(i,1,n)
{
scanf("%d",&j);
New(j+n,i);
}
scanf("%d",&B);
fo(i,2,B)
{
scanf("%d",&j);
New(j+n+A,i+n+A);
}
fo(i,1,n)
{
scanf("%d",&j);
New(j+n+A,i);
}
d[0][n+1]=d[1][n+A+1]=1;
dfs(0,n+1);
dfs(1,n+A+1);
memset(f,127,sizeof(f));
f[0][0]=0;
fo(i,0,n-1)
{
fo(j,0,n-1)
{
k=max(i,j)+1;
l=lca(0,i,k);
f[k][j]=min(f[k][j],f[i][j]+(d[0][k]-d[0][l]-1));
l=lca(1,j,k);
f[i][k]=min(f[i][k],f[i][j]+(d[1][k]-d[1][l]-1));
}
}
ans=2133333333;
fo(i,0,n-1)
ans=min(ans,min(f[i][n],f[n][i]));
printf("%d\n",(A-1)+(B-1)-ans);
}
CF1263F的更多相关文章
- CF1263F Economic Difficulties(DP)
拿小号打了这场,然而做到这里时少看了条件,最后 10min 才发现,没有 AK,身败名裂-- 赛后看就是 sb 题-- (好像这题也不值 2500 吧?) 首先注意到一条很重要的条件:对于每棵树,都存 ...
随机推荐
- React Native调用系统浏览器
import { Linking} from 'react-native'; //使用系统浏览器访问指定URLexport const contactBaidu = () => { var ba ...
- 接口自动化-python unittest+requests+HTMLrunner
从2015年毕业入行软件测试,快满4年了,之前技术分享都在百度贴吧上面,现在正式开始在博客中记录工作技术,努力成长,加油 接口测试的步骤1.组装好该接口需要的参数数据2.使用get或post附带参数数 ...
- 【神经网络与深度学习】【Qt开发】【VS开发】从caffe-windows-visual studio2013到Qt5.7使用caffemodel进行分类的移植过程
[神经网络与深度学习][CUDA开发][VS开发]Caffe+VS2013+CUDA7.5+cuDNN配置成功后的第一次训练过程记录<二> 标签:[神经网络与深度学习] [CUDA开发] ...
- [JavaScript] console.log只在查看时才会读取这个打印的对象,并把此刻相关属性和值显示出来
/** * 写个函数解决console.log只在查看时才会读取这个打印的对象,并把此刻相关属性和值显示出来 * @param arg */ const log = function (...ar ...
- 深入理解java:4.2. 框架编程之Spring框架的设计理念
什么是Spring呢? Spring是为了解决企业应用开发的复杂性而创建的一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架. Spring优点 简单了解Spring之后,我们看一下Spri ...
- openvswitch笔记
下载解压sudo wget http://openvswitch.org/releases/openvswitch-2.4.1.tar.gztar -xvf openvswitch-2.4.1.tar ...
- MySQL数据库常用引擎
在MySQL数据库中,常用的引擎主要就是2个:Innodb和MyIASM. 首先: 1.简单介绍这两种引擎,以及该如何去选择.2.这两种引擎所使用的数据结构是什么. 1. a.Innodb引擎,Inn ...
- 【转帖】如何看待 HTTP/3 ?
如何看待 HTTP/3 ? https://mp.weixin.qq.com/s/fC10Cyj6xjjwOCnqxX-Dvg 车小胖的公众号 转帖学习一下. 原创: 车小胖谈网络 车小胖谈网络 20 ...
- 【转帖】技术选型之Docker容器引擎
技术选型之Docker容器引擎 https://segmentfault.com/a/1190000019462392 图过不来的 原作者写的挺好的 题外话 最近对Docker和Kubernetes进 ...
- win7启动tomcat失败处理
本地启动tomcat 后访问 127.0.0.1:8080 失败,查看错误如下 使用如下命令杀死占用8080的进程 netstat -ano | findstr 8080 # 查看8080端口状态 t ...