[APIO2020]交换城市(交互+kruskal重构树)

[APIO2020]交换城市

description

solution

在这里插入图片描述

如果u,vu,vu,v存在于一条链上(只有两个点度数为111其余点度数为222)则无解,否则必有解

如图,不管是哪个点度数>2>2>2,都可以有解

以蓝色为例,第二个红点右移到蓝色右边,第一个红点走进蓝色,第二个红点走到第一个红点开始位置,第一个红点出来回到第二个红点开始位置

因此本题只是在kruskal重构树(每次新建一个点,把两个点连在新点下面当儿子,新点点权即为原两点的边权)的基础上多了一个链判断的维护

不需要用启发式合并,只需要判断siz[u]=cnt[u][1]+cnt[u][2]&&cnt[u][1]==2

code

#include "swap.h"
#include <bits/stdc++.h>
using namespace std;
#define maxn 300005
struct node  {int u, v, w;node(){}node( int U, int V, int W ) {u = U, v = V, w = W;}
}edge[maxn];
vector < int > G[maxn];
int n, m, ip;
int MS[maxn], d[maxn], val[maxn], siz[maxn], g[maxn], dep[maxn];
int f[maxn][20], cnt[maxn][3];bool cmp ( node x, node y ) {return x.w < y.w;
}int find( int x ) {return x == MS[x] ? x : MS[x] = find( MS[x] );
}void dfs( int u, int fa ) {f[u][0] = fa, dep[u] = dep[fa] + 1;for( int i = 1;i < 20;i ++ )f[u][i] = f[f[u][i - 1]][i - 1];if( cnt[u][1] == 2 && cnt[u][1] + cnt[u][2] == siz[u] ) g[u] = g[fa];else g[u] = u;for( int i = 0;i < ( int )G[u].size();i ++ ) {int v = G[u][i];if( v == fa ) continue;else dfs( v, u );}
}void modify( int x, int v ) {if( 1 <= d[x] && d[x] <= 2 ) cnt[find( x )][d[x]] += v;
}void kruskal() {sort( edge + 1, edge + m + 1, cmp );for( int i = 1;i <= n;i ++ ) MS[i] = i, siz[i] = 1;ip = n;for( int i = 1;i <= m;i ++ ) {int u = edge[i].u, v = edge[i].v, w = edge[i].w;int fu = find( u ), fv = find( v );if( fu ^ fv ) {++ ip;cnt[ip][1] = cnt[fu][1] + cnt[fv][1];cnt[ip][2] = cnt[fu][2] + cnt[fv][2];siz[ip] = siz[fu] + siz[fv];MS[fu] = ip, MS[fv] = ip;val[ip] = w;MS[ip] = ip;G[ip].push_back( fu );G[ip].push_back( fv );}else if( val[fu] != w ) {++ ip;cnt[ip][1] = cnt[fu][1];cnt[ip][2] = cnt[fu][2];siz[ip] = siz[fu];MS[fu] = ip;MS[ip] = ip;val[ip] = w;G[ip].push_back( fu );}modify( u, -1 );modify( v, -1 );d[u] ++;d[v] ++;modify( u, 1 );modify( v, 1 );}dfs( ip, 0 );
}int get_lca( int u, int v ) {if( dep[u] < dep[v] ) swap( u, v );for( int i = 19;~ i;i -- )if( dep[f[u][i]] >= dep[v] )u = f[u][i];if( u == v ) return u;for( int i = 19;~ i;i -- )if( f[u][i] != f[v][i] )u = f[u][i], v = f[v][i];return f[u][0];
}void init( int N, int M, vector < int > U, vector < int > V, vector < int > W ) {n = N, m = M;for( int i = 0;i < m;i ++ )edge[i + 1] = node( U[i] + 1, V[i] + 1, W[i] );	kruskal();
}int getMinimumFuelCapacity( int x, int y ) {x ++, y ++;int lca = get_lca( x, y );if( ! g[lca] ) return -1;else return val[g[lca]];
}

完全不能调试的交互题!!!
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/317386.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

P3320:寻宝游戏(生成树)

解析 大结论题… 实在是不知道这题和虚树有半毛钱关系吗… 引理 给出一个按照dfs排列的点集S{a1,a2…ak} 它们的极小联通子树的边权和的二倍等于∑dis(a1,a2)dis(a2,a3)...dis(ak−1,ak)dis(ak,a1)\sum dis(a_1,a_2)dis(a_2,a_3)...dis(a_k-1,a_k)dis(a_k,a_1)∑dis(a1​,a2​…

P5333-[JSOI2019]神经网络【dp,容斥】

正题 题目链接:https://www.luogu.com.cn/problem/P5333 题目大意 给出nnn棵树&#xff0c;第iii棵树有kik_iki​个点&#xff0c;每棵树上的每个点和其它树上的所有点都有连边。 求这棵树有多少条哈密顿回路。 答案对998244353998244353998244353取模。 ∑i1nki≤5000\sum…

如何在ASP.NET Core程序启动时运行异步任务(1)

原文&#xff1a;Running async tasks on app startup in ASP.NET Core (Part 1)作者&#xff1a;Andrew Lock译者&#xff1a;Lamond Lu背景当我们做项目的时候&#xff0c;有时候希望自己的ASP.NET Core应用在启动前执行一些初始化逻辑。例如&#xff0c;你希望验证配置是否合…

扫描线讲解

参考文章&#xff1a; 线段树扫描线&#xff08;有关扫描线的理解&#xff09; 线段树扫描线&#xff08;基本原理&#xff09; 扫描线 第二个文章里面的图很生动&#xff1a; 我总结一下就是&#xff1a;将所给图形的横坐标全部记录&#xff0c;纵坐标记录为扫描线 然后对与…

P5400-[CTS2019]随机立方体【二项式反演,计数】

正题 题目链接:https://www.luogu.com.cn/problem/P5400 题目大意 有一个nmln\times m\times lnml的三维网格&#xff0c;要在每个格子处填上一个数&#xff0c;要求填的数中1∼nml1\sim n\times m\times l1∼nml都恰好出现了一次。 一个极大值被定义为这个格子比其他与它至…

「CEOI2019」魔法树(DP+差分启发式合并)

「CEOI2019」魔法树 description solution 设dpi,j:idp_{i,j}:idpi,j​:i子树在jjj时刻的最大果汁量&#xff0c;显然dpi,jdp_{i,j}dpi,j​在jjj是单调递增的 dpi,jmax⁡(dpi,j,dpi,j−1)dp_{i,j}\max(dp_{i,j},dp_{i,j-1})dpi,j​max(dpi,j​,dpi,j−1​) iii不收获 dpi,j∑…

梁迪:我为MVP骄傲,《微软最有价值专家奖励计划介绍》附专题视频

题记&#xff1a;有些事情&#xff0c;比 MVP 更加不朽&#xff0c;浩气长空&#xff0c;日月星汉&#xff0c;我们为 MVP 和那些心目中的“MVP”感到骄傲。微软 MVP 是一种追求&#xff0c;不必要去强求&#xff0c;但 MVP 必定是俱乐部发展的根基础。火车跑得快全凭车头带&am…

CF1472(div3):总结

文章目录前言A. Cards for Friends题意简述解析代码B. Fair Division题意简述解析代码C. Long Jumps题意简述解析代码D. Even-Odd Game题意简述解析代码E. Correct Placement题意简述解析代码F. New Years Puzzle题意简述解析代码G. Moving to the Capital题意简述解析代码前言…

How Much Memory Your Code Is Using? Gym - 101955J

How Much Memory Your Code Is Using? Gym - 101955J 题意&#xff1a; t组数据&#xff0c;每组数据会有n个定义类型的方式&#xff0c;给你每个类型所占字节&#xff0c;问一共占了多少字节&#xff0c;最终答案按照Kibibyte单位输出&#xff0c;并向上取整 题解&#xf…

P3295 [SCOI2016]萌萌哒(DP+倍增)

P3295 [SCOI2016]萌萌哒 description solution 强制部分区间相同&#xff0c;很容易就想到了并查集&#xff0c;直接暴力并查集合并是O(n2)O(n^2)O(n2)的 只需要考虑那一个数据结构将其转化成O(nlog⁡n)O(n\log n)O(nlogn)的 树之类的就不考虑了&#xff0c;一段一段的区间…

CF1677D-Tokitsukaze and Permutations【结论】

正题 题目链接:https://www.luogu.com.cn/problem/CF1677D 题目大意 对于一个排列pip_ipi​&#xff0c;定义一个序列vF(p)vF(p)vF(p)&#xff0c;其中vi∑j1i−1[pj>pi]v_i\sum_{j1}^{i-1}[p_j>p_i]vi​∑j1i−1​[pj​>pi​]。 一次冒泡排序为依次对1∼n−11\sim…

【恭贺新春】2019年春节放假

2019年放假通知致全体微友&#xff1a; 2019年2月5日&#xff08;正月初一&#xff09;至2月8日&#xff08;正月初四&#xff09;春节放假&#xff0c;共4天&#xff0c;小编停止更新公众号信息。敬请相互转告。值此新春佳节到来之际&#xff0c;“dotNet跨平台”给大家拜个…

模板:圆方树

所谓圆方树&#xff0c;就是又圆又方的树 &#xff08;逃&#xff09; 前言 树有很多良好的性质&#xff0c;也可以上许多算法和数据结构 但我们对于一般图却没有太多办法… 然而&#xff0c;对于有些关注连同性、路径并&交的一般图问题&#xff0c;我们可以用圆方树&…

C - Insertion Sort Gym - 101955C

C - Insertion Sort Gym - 101955C 题意&#xff1a; t组数据&#xff0c;每组数据给你n&#xff0c;k&#xff0c;q&#xff0c;让你求存在多少合法的1~n排列 合法要求&#xff1a; 对排列的前k项进行排序&#xff0c;使得整个序列中最长的递增子序列长度为n-1 题解&#x…

P8330-[ZJOI2022]众数【根号分治】

正题 题目链接:https://www.luogu.com.cn/problem/P8330 题目大意 给出一个长度为nnn的序列aaa&#xff0c;你可以选择其中一个区间将其加上任意整数&#xff0c;要求这个序列的众数出现次数最多。 输出最多次数和可能的众数。 1≤n≤2105,1≤ai≤109,∑n≤51051\leq n\leq …

华为云.NET Core支持情况调查

各大公有云都提供了开发者开发的SDK&#xff0c;今天我们来看看华为云对.NET Core的支持情况怎么样&#xff1f; .NET SDK地址 https://developer.huaweicloud.com/sdk#.NET华为云的.NET SDK相比其他语言少的可伶&#xff0c;而且这几个SDK还不支持.NET Core。SDK的支持实在太差…

[2021-07-19 内测NOIP] 操作(状压DP),异或(字典树),等级(线段树),矩阵(DP)

[2021-07-19 内测] NOIP操作descriptionsolutioncode异或descriptionsolutioncode等级descriptionsolutioncode矩阵descriptionsolutioncode操作 description 有n堆石子&#xff0c;每堆石子都有一定的数量&#xff0c;第i堆石子的数量用Ai表示。 任意两堆石子均可合并&…

codeforces:1361(div1)1362(div2):总结

文章目录前言1362-A. Johnny and Ancient Computer解析1362-B - Johnny and His Hobbies解析1362-C - Johnny and Another Rating Drop解析1361-A Johnny and Contribution解析1361-B - Johnny and Grandmaster解析1361-C - Johnny and Megans Necklace解析1361-D - Johnny and…

2018沈阳区域赛

题目地址 题号题目知识点难度ASockpuppetsBSequences GeneratorCInsertion Sort找规律&#xff0c;推公式DDiameter of a TreeEThe Kouga Ninja ScrollsFCounting Sheep in Ami DongsuoGBest ACMer Solves the Hardest Problem思维暴力HRainbow GraphIDistance Between Sweeth…

.NET和Java之争

这几天连续有多篇文章诋毁.NET&#xff0c;这类文章我十几年前就看得多了&#xff0c;只不过十几年前是C和C之争&#xff0c;C和Java之争。我从来不理这类文章&#xff0c;因为这类口水战并没有什么实际意义。然而接连收到多位粉丝私聊说&#xff0c;主席&#xff0c;你应该写点…