codeforces 1391E Pairs of Pairs dfs树的性质
https://codeforces.com/problemset/problem/1391/E
题意:给一个无向图,找出以下任意一种输出答案
1,长度>=n/2(上界)的简单路径(没有同一个点走2次的路径)
2,点对树>=n/2(上界)的点对集,使得点对集内部的任意两个点对的4个点,边数不超过2
解法:
根据dfs树的性质,每个点x的出边只有树边和返祖边两种,返祖边只会连到x的祖先节点,所以任意一个节点的两颗子树没有横向边。

这个题先从某个点导出一颗dfs树,如果深度>=n/2(上界),直接输出路径即可。
否则,直接让同深度的点配对即可,深度低于n/2(上界),树必然宽,横向同深度的点对配对后加起来总点对树一定>=n/2(上界)。

#include<bits/stdc++.h> using namespace std; typedef long long ll;
const int maxn=500100;
const int INF=(1<<29); int n,m;
int u,v;
vector<int> G[maxn];
vector<int> T[maxn];
vector<int> node[maxn];
int dep[maxn];
int max_dep[maxn];
vector<int> path;
vector<pair<int,int> > prs;
bool vis[maxn]; void init(){
for(int i=0;i<=n;i++) G[i].clear(),node[i].clear(),dep[i]=0,vis[i]=0,max_dep[i]=0,T[i].clear();
path.clear();prs.clear();
} void input(){
for(int i=1;i<=m;i++){
scanf("%d%d",&u,&v);
G[u].push_back(v);
G[v].push_back(u);
}
} void dfs(int u,int f){
if(vis[u]) return;
vis[u]=1;
if(u!=1) T[f].push_back(u);
for(int i=0;i<G[u].size();i++){
int v=G[u][i];
if(v==f) continue;
dfs(v,u);
}
} void go(int u){
path.push_back(u);
int next=u;
for(int i=0;i<T[u].size();i++){
int v=T[u][i];
if(max_dep[v]>=max_dep[next]) next=v;
}
if(next==u) return;
go(next);
} void get_d(int u,int f,int d){
dep[u]=d;
max_dep[u]=d;
node[d].push_back(u);
for(int i=0;i<T[u].size();i++){
int v=T[u][i];
get_d(v,u,d+1);
max_dep[u]=max(max_dep[u],max_dep[v]);
}
} void solve(){
init();
input();
dfs(1,0);
get_d(1,0,1);
if(max_dep[1]>=(n+1)/2){
go(1);
puts("PATH");
cout<<(int)path.size()<<endl;
for(int i=0;i<path.size();i++) cout<<path[i]<<" ";cout<<endl;
}
else{
for(int i=2;i<=max_dep[1];i++){
if((int)node[i].size()<2) continue;
for(int j=1;j<node[i].size();j+=2) prs.push_back(make_pair(node[i][j-1],node[i][j]));
}
puts("PAIRING");
cout<<(int)prs.size()<<endl;
for(int i=0;i<prs.size();i++) cout<<prs[i].first<<" "<<prs[i].second<<endl;
}
} int main(){
// freopen("in.txt","r",stdin);
int T;cin>>T;
while(~scanf("%d%d",&n,&m)) solve();
return 0;
}
另一点就是把长程序分解分模块写,可以减少bug,更好排查,出错的时候更容易理清主体思路,思路永远优先于码速。
codeforces 1391E Pairs of Pairs dfs树的性质的更多相关文章
- Codeforces 842C--Ilya And The Tree(dfs+树)
原题链接:http://codeforces.com/contest/842/problem/C 题意:一个以1为根节点的树,每个节点有一个值ai,定义美丽度:从根节点到这个节点的路径上所有ai的gc ...
- 【BZOJ1064】[Noi2008]假面舞会 DFS树
[BZOJ1064][Noi2008]假面舞会 Description 一年一度的假面舞会又开始了,栋栋也兴致勃勃的参加了今年的舞会.今年的面具都是主办方特别定制的.每个参加舞会的人都可以在入场时选择 ...
- Solution -「CF 1391E」Pairs of Pairs
\(\mathcal{Description}\) Link. 给定一个 \(n\) 个点 \(m\) 条边的无向图,在其上找到一条包括不少于 \(\lceil\frac{n}2\rceil\ ...
- codeforces 1076E Vasya and a Tree 【dfs+树状数组】
题目:戳这里 题意:给定有n个点的一棵树,顶点1为根.m次操作,每次都把以v为根,深度dep以内的子树中所有的顶点(包括v本身)加x.求出最后每个点的值为多少. 解题思路:考虑到每次都只对点及其子树操 ...
- zstu.4191: 无向图找环(dfs树 + 邻接表)
4191: 无向图找环 Time Limit: 5 Sec Memory Limit: 128 MB Submit: 117 Solved: 34 Description 给你一副无向图,每条边有 ...
- Codeforces 219D. Choosing Capital for Treeland (树dp)
题目链接:http://codeforces.com/contest/219/problem/D 树dp //#pragma comment(linker, "/STACK:10240000 ...
- BZOJ_4238_电压_树上差分+dfs树
BZOJ_4238_电压_树上差分+dfs树 Description 你知道Just Odd Inventions社吗?这个公司的业务是“只不过是奇妙的发明(Just Odd Inventions)” ...
- LOJ2250 [ZJOI2017] 仙人掌【树形DP】【DFS树】
题目分析: 不难注意到仙人掌边可以删掉.在森林中考虑树形DP. 题目中说边不能重复,但我们可以在结束后没覆盖的边覆盖一个重复边,不改变方案数. 接着将所有的边接到当前点,然后每两个方案可以任意拼接.然 ...
- Codeforces962F Simple Cycles Edges 【双连通分量】【dfs树】
题目大意: 给出一个无向图,问有哪些边只属于一个简单环. 题目分析: 如果这道题我们掌握了点双连通分量,那么结论会很显然,找到每个点双,如果一个n个点的点双正好由n条边构成,那么这些边都是可以的. 这 ...
- BZOJ5203 [NEERC2017 Northern] Grand Test 【dfs树】【构造】
题目分析: 首先观察可知这是一个无向图,那么我们构建出它的dfs树.由于无向图的性质我们可以知道它的dfs树只有返祖边.考虑下面这样一个结论. 结论:若一个点的子树中(包含自己)有两个点有到它祖先的返 ...
随机推荐
- Vue3 自定义指令执行了两次的问题
下面是我注册全局指令的代码,这是我注册的一个通过 hljs 解析 html -> pre code 的指令,数据是异步获取的: app.directive("parse-code&qu ...
- 剖析flutter_download_manager学习如何做下载管理,暂停和取消
前言 内容类应用中图片或文件下载,一般应用中应用更新和升级,这些都是经典的下载场景.下载是项目中基础且重要的模块. 从代码逻辑复用性和人力成本考虑,一直想实现一个纯Dart实现的下载库,作为技术储备. ...
- cximage总括功能讲解
CxImage的功能 Constructors 构造函数 Initialization 初始化 File 文件操作,主要是编解码 Generic 图像基本变化 DSP 图像处理操作 Paintin ...
- fabric学习笔记11
fabric学习笔记10 20201303张奕博 2023.1.23 测试实践2 导入链码依赖包 package main import ( "github.com/hyperledger/ ...
- Mysql数据库基础第七章:流程控制结构
Mysql数据库基础系列 软件下载地址 提取码:7v7u 数据下载地址 提取码:e6p9 mysql数据库基础第一章:(一)数据库基本概念 mysql数据库基础第一章:(二)mysql环境搭建 mys ...
- css3的的新特性
1.transform 2.calc 3.transition
- 使用windows平板学习与办公的一些经历(酷比魔方i9篇)
大概是在2019年的时候,我在某平台上购买了900元的二手windows平板电脑,酷比魔方i9 首先谈谈背景.当时我手里是有个笔记本,屏幕大概15.6寸,4G+256G的,平时用的时候功率平均20几W ...
- 2022-05-13内部群每日三题-清辉PMP
1.一个运营团队认为他们的技能在项目上是不必要的,团队士气低落,且团队成员试图阻止项目实现目标.项目经理应该怎么做? A.建议公司改变战略,并立即停止项目 B.要求工会的支持来激励团队 C.根据项目成 ...
- fastlane iOS打包 安装与使用
1.安装 fastlane sudo gem install fastlane 2.进入工程目录下 终端输入 fastlane init 接着输入3 然后control + c退出 接着编写 Fast ...
- linux开机出现grub界面
今天开机时候突然出现grub界面,并且卡在这里,记录一下解决办法 ①输入ls 2. 输入ls (hd0,6)/ 可以看到返回的就是linux系统的根目录,说明这个磁盘就是我们的系统的所在盘 如果ls ...