正解:

解题报告:

传送门!

首先看数据范围可以发现要么是棵树要么是个奇环要么是个偶环

然后就分类讨论分别看下这几个情况

首先是棵树的

首先可以想到树的情况就是个二分图,所以不妨把颜色重定义,让奇数层的变成白色偶数层的变成黑色,然后就变成了,可以交换一个黑色和一个白色,求能否让白的都变成黑的.黑的都变成白的

然后再赋个值,令黑色为-1白色为1

首先无解的情况很容易想到嘛,就是当黑色白色的点本来就不相等的时候显然是布星的

然后继续想,设f[i]:点i额外转换的次数

显然答案的下界是∑abs(f[i])

然后可以想到这个∑abs(f[i])显然是可以达到的,有点儿像一个贪心的基础题忘了叫什么了,,,反正挺显然的?

然后考虑有环的情况,这儿要分奇环偶环分开讨论下

对于奇环,就相当于是连了同一奇偶性的两个点,就是说本来正常交换是一个+1一个-1正好抵消,而这样做就变成了都+1或者都+2,那就可以不保证黑色白色相等了,只要黑色白色的差值是偶数就可以通过这条边抵消掉

所以可以发现这条边的用处就是抵消差值,所以可以先算出差值,然后as+=差值/2,这时候这条边的作用就用完了,剩下就当树一样处理就好

对于偶环,其实从大局来看就和树是差不多的,就是假如现在已经在它们的lca之上了,那么这条多余的链反正修改起来也是+1-1的所以麻油什么影响

所以可以发现有影响的只是lca的子树内部的,也就是那个环上的

可以考虑设这条多余的链上运输了x次,然后可以发现,会改变的就左端点到lca会+=x,右端点到lca会-=x

然后被修改了的值列成式子就会变成,∑abs(t*f[i]-x),然后这儿t是±1,能get趴?就上面那个式子嘛

然后这个式子再仔细一看,小学奥数鸭,绝对值之和min就是取中位数的时候嘛

然后就做完啦啦啦!

放下代码QAQ

#include<bits/stdc++.h>
using namespace std;
#define il inline
#define ll long long
#define rg register
#define gc getchar()
#define t(i) edge[i].to
#define rp(i,x,y) for(rg int i=x;i<=y;++i)
#define my(i,x,y) for(rg int i=x;i>=y;--i)
#define e(i,x) for(rg int i=head[x];i;i=edge[i].nxt) const int N=1e5+;
int n,m,head[N],ed_cnt,sz[N],st,to,sum,as,top,stck[N],g[N];
struct ed{int to,nxt;}edge[N<<];
bool jud;
bool vis[N]; il int read()
{
rg char ch=gc;rg int x=;rg bool y=;
while(ch!='-' && (ch>'' || ch<''))ch=gc;
if(ch=='-')ch=gc,y=;
while(ch>='' && ch<='')x=(x<<)+(x<<)+(ch^''),ch=gc;
return y?x:-x;
}
il void ad(int x,int y){edge[++ed_cnt]=(ed){x,head[y]};head[y]=ed_cnt;}
void dfs1(int x,int fa){e(i,x)if(t(i)^fa)if(sz[t(i)]){if(sz[t(i)]==sz[x])jud=;st=x;to=t(i);}else sz[t(i)]=-sz[x],dfs1(t(i),x);}
void dfs2(int x,int fa){vis[x]=;e(i,x)if(t(i)^fa && !((x==st && t(i)==to) || (x==to && t(i)==st)))dfs2(t(i),x),sz[x]+=sz[t(i)],g[x]+=g[t(i)];return;} int main()
{
n=read();m=read();rp(i,,m){int x=read(),y=read();ad(x,y);ad(y,x);}sz[]=;dfs1(,);
rp(i,,n)sum+=sz[i];if(!jud)if(sum)return printf("-1\n"),;
if(m==n)if(jud){if(sum&)return printf("-1\n"),;as+=abs(sum>>);sz[st]-=(sum>>);sz[to]-=(sum>>);}else g[st]=,g[to]=-;
dfs2(,);
rp(i,,n){if(g[i])stck[++top]=g[i]*sz[i];else as+=abs(sz[i]);}
stck[++top]=;sort(stck+,stck+top+);int mid=stck[(top+)>>];
rp(i,,top)as+=abs(stck[i]-mid);
printf("%lld\n",as);
return ;
}

AT2046 Namori 图论的更多相关文章

  1. 洛谷AT2046 Namori(思维,基环树,树形DP)

    洛谷题目传送门 神仙思维题还是要写点东西才好. 树 每次操作把相邻且同色的点反色,直接这样思考会发现状态有很强的后效性,没办法考虑转移. 因为树是二分图,所以我们转化模型:在树的奇数层的所有点上都有一 ...

  2. AtCoder AGC004F Namori (图论)

    题目链接 https://atcoder.jp/contests/agc004/tasks/agc004_f 题解 神仙题.. 首先考虑树的情况,树是二分图,因此假设我们对二分图进行黑白染色,那么操作 ...

  3. [leetcode] 题型整理之图论

    图论的常见题目有两类,一类是求两点间最短距离,另一类是拓扑排序,两种写起来都很烦. 求最短路径: 127. Word Ladder Given two words (beginWord and end ...

  4. 并查集(图论) LA 3644 X-Plosives

    题目传送门 题意:训练指南P191 分析:本题特殊,n个物品,n种元素则会爆炸,可以转移到图论里的n个点,连一条边表示u,v元素放在一起,如果不出现环,一定是n点,n-1条边,所以如果两个元素在同一个 ...

  5. NOIp 2014 #2 联合权值 Label:图论 !!!未AC

    题目描述 无向连通图G 有n 个点,n - 1 条边.点从1 到n 依次编号,编号为 i 的点的权值为W i ,每条边的长度均为1 .图上两点( u , v ) 的距离定义为u 点到v 点的最短距离. ...

  6. HDU 5521 [图论][最短路][建图灵感]

    /* 思前想后 还是决定坚持写博客吧... 题意: n个点,m个集合.每个集合里边的点是联通的且任意两点之间有一条dis[i]的边(每个集合一个dis[i]) 求同时从第1个点和第n个点出发的两个人相 ...

  7. SDUT 2141 【TEST】数据结构实验图论一:基于邻接矩阵的广度优先搜索遍历

    数据结构实验图论一:基于邻接矩阵的广度优先搜索遍历 Time Limit: 1000MS Memory Limit: 65536KB Submit Statistic Discuss Problem ...

  8. [转] POJ图论入门

    最短路问题此类问题类型不多,变形较少 POJ 2449 Remmarguts' Date(中等)http://acm.pku.edu.cn/JudgeOnline/problem?id=2449题意: ...

  9. HDU 5934 Bomb 【图论缩点】(2016年中国大学生程序设计竞赛(杭州))

    Bomb Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submis ...

随机推荐

  1. Go指南_切片的长度与容量

    源地址 https://tour.go-zh.org/moretypes/11 一.描述 切片拥有 长度 和 容量. 切片的长度就是它所包含的元素个数. 切片的容量是从它的第一个元素开始数,到其底层数 ...

  2. Cisco VLAN ACL配置

    什么是ACL? ACL全称访问控制列表(Access Control List),主要通过配置一组规则进行过滤路由器或交换机接口进出的数据包, 是控制访问的一种网络技术手段, ACL适用于所有的被路由 ...

  3. Android中使用第三方jar包

    步骤: 方法1:Eclipse下, 右键工程, Build path, java build path, 选择libraries 在右边的按钮中点击“Add Library” 选择“User libr ...

  4. ng4.0 使用[innerHTML]动态插入的富文本如何设置样式

    方法一:在css中设置样式 for CSS added to the component :host ::ng-deep mySelector { background-color: blue; } ...

  5. 题目1018:统计同成绩学生人数(数组或者map)

    题目链接:http://ac.jobdu.com/problem.php?pid=1018 详解链接:https://github.com/zpfbuaa/JobduInCPlusPlus 参考代码: ...

  6. mdadm命令详解

    创建阵列(-C或--create) --raid-devices(-n) 功能:指定阵列中成员盘个数. 举例:mdadm --create /dev/md0 -l5 -n2 /dev/sdb /dev ...

  7. SQL Server 2012 R2升级到SQL Server 2016无法正常启动数据库服务解决方案

    原定周末把公司的TFS升级到2018,由于TFS 2018需要SQL Server至少是2016以上版本,所以还需要将原来的SQL Server 2012 R2一并升级.今天早上负责的同事告诉我升级失 ...

  8. Pro ASP.NET MVC –第三章 MVC模式

    在第七章,我们将创建一个更复杂的ASP.NET MVC示例,但在那之前,我们会深入ASP.NET MVC框架的细节:我们希望你能熟悉MVC设计模式,并且考虑为什么这样设计.在本章,我们将讨论下列内容 ...

  9. redmine增加文本输入框默认格式

    需求:击一个按钮,在文本输入区域自动生成如下图的内容: 1. 详细描述: 2. 详细步骤: 3. 期望结果: 4. 实际结果: 实现过程: 1 打开文件\apps\redmine\public\jav ...

  10. wpgcms---导航高亮显示

    在使用wpgcms做项目的时候,有时候三级栏目默认是没有高亮显示的一级导航的,例如:文章详情页要对应的文章栏目进行高亮显示,三级单篇页要对应栏目是高亮显示.具体做法是: 首先看获取导航的方式: {% ...