CF1610F F. Mashtali: a Space Oddysey
我们首先发现有如下性质:
我们不妨先随机定向边,那么我们发现无论我们如何翻转边。
都会对其两端的点,造成 \(2 / 4\) 的影响,所以我们发现如果一个点其和他相连的所有边权和为偶数,则我们不能调整其为好点。
那么我们自然的思考,是否能够构造一种方案使得所有边权和为奇数的都可以成为好点。
我们下列先给出一个方案再进行一个证明。
我们对所有的奇度点都与一个虚点相连一条边权为 \(1\) 的虚边。
我们知道一条边会同时改变两点的度数奇偶情况,即奇度数点为偶数。
所以我们操作之后一定所有点都是偶数,那这图是一个欧拉回路。
考虑我们在进行欧拉回路的遍历时,我们首先满足让出边让入边的边权相等,否则使用另一边。
考虑对边权为偶数的我们可以任意定向,那我们不进行考虑。
那么我们考虑边权为奇数的,那么有两种情况。
一:奇数条边权为 \(1\) 的边,奇数条的边权边权为 \(2\) 的边。
此种情况,我们按我们的操作的一定会最后只会抵消到只剩一条边权为 \(1\) 的和一条边权为 \(2\) 的边。
那么其为好点。
一:奇数条边权为 \(1\) 的边,偶数条的边权边权为 \(2\) 的边。
此种情况,我们按我们的操作的一定会最后只会抵消到只剩一条边权为 \(1\)。
那么其为好点。
所以我们只要按照这种操作即可使得所有边权和的奇数的点都是好点。
#include<iostream>
#include<cstdio>
#include<vector>
#include<queue>
#include<list>
#define ll lonng long
#define N 600005
bool begin;
int n,m;
int to[N];
int from[N];
int sum[N];
int fans,ans[N];
int vis[N];
int cnt[N];
std::vector<int>Q[N][3];//边权为1,边权为2
int head[N][3];
int dfn[N];
bool end;
inline void dfs(int u,int now){
// std::cout<<u<<" "<<now<<std::endl;
// std::cout<<"rest"<<head[u][now]<<" "<<head[u][3 - now]<<std::endl;
int fnow = now;
while(!(Q[u][now].size() <= head[u][now] && Q[u][3 - now].size() <= head[u][3 - now])){
dfn[u] = 1;
while(head[u][now] < Q[u][now].size() && vis[Q[u][now][head[u][now]]])
head[u][now] ++;
while(head[u][3 - now] < Q[u][3 - now].size() && vis[Q[u][3 - now][head[u][3 - now]]])
head[u][3 - now] ++;
if(Q[u][now].size() != head[u][now]){
ans[Q[u][now][head[u][now]]] = (u == from[Q[u][now][head[u][now]]]) + 1;
vis[Q[u][now][head[u][now]]] = 1;
// std::cout<<"("<<u<<"->"<<" "<<(to[Q[u][now][head[u][now]]] - u)<<")"<<std::endl;
// std::cout<<Q[u][now].front()<<std::endl;
dfs(to[Q[u][now][head[u][now]]] - u,now);
head[u][now] ++ ;
}else{
now = 3 - now;
if(Q[u][now].size() != head[u][now]){
ans[Q[u][now][head[u][now]]] = (u == from[Q[u][now][head[u][now]]]) + 1;
vis[Q[u][now][head[u][now]]] = 1;
// std::cout<<"("<<u<<"->"<<" "<<(to[Q[u][now][head[u][now]]] - u)<<")"<<std::endl;
// std::cout<<Q[u][now].front()<<std::endl;
dfs(to[Q[u][now][head[u][now]]] - u,now);
head[u][now] ++ ;
}
}
now = fnow;
}
return ;
}
int main(){
// std::cout<<(&end - &begin) / 1024 / 1024<<std::endl;
scanf("%d%d",&n,&m);
for(int i = 1;i <= m;++i){
int x,y,p;
scanf("%d%d%d",&x,&y,&p);
to[i] = x + y;
cnt[x] ++ ;
cnt[y] ++ ;
from[i] = x;
sum[x] += p;
sum[y] += p;
Q[x][p].push_back(i);
Q[y][p].push_back(i);
}
int mcnt = m;
for(int i = 1;i <= n;++i){
if(sum[i] & 1)
fans ++ ;
if(cnt[i] & 1){
int x = n + 1;
int y = i;
int p = 1;
to[++mcnt] = x + y;
from[mcnt] = x;
Q[x][p].push_back(mcnt);
Q[y][p].push_back(mcnt);
}
}
for(int i = 1;i <= n + 1;++i)
if(!dfn[i])
dfs(i,1);
std::cout<<fans<<std::endl;
for(int i = 1;i <= m;++i)
std::cout<<(ans[i]);
return 0;
}
CF1610F F. Mashtali: a Space Oddysey的更多相关文章
- 列表屏幕(List Screen)
声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...
- ES5基础之正则表达式02:范围类、预定义类和边界字符
1.范围类 //元字符 /* * 正则表达式由两种基本字符类型组成 * 1.原义文本字符:例如123abc * 2.元字符:元字符是在正则表达式中有特殊含义的非字母字符 */ //常见特殊符号:. * ...
- mac 系统通用快捷键(mac 下的应用多数会往这些标准看齐)(转:http://yang3wei.github.io/blog/2013/02/08/chen-ni-yu-mac-chen-ni-yu-xcode/)
command + w: 关闭当前窗口 command + q: 退出程序 (Google Chrome 有点奇葩,按下之后还需要hold 那么一小会儿才能退出) command + m: 最小化当前 ...
- 获取windows磁盘的可用空间函数
<?php /* *获取某个磁盘的剩余空间 *$param 关联数组,下标是哪个盘,单位,可以是B,KB,MB,GB *可以设置获取多个磁盘,例如:array('C'=>'KB','D'= ...
- web前端开发工具HBuilder使用技巧之快捷键
/*注:本教程针对HBuilder5.0.0,制作日期2014-12-31*/ 创建HTML结构: h 8 (敲h激活代码块列表,按8选择第8个项目,即HTML代码块,或者敲h t Enter) 中途 ...
- Half Wavelength Dipole Antenna
Reference : 1. wikipedia The dipole antenna is the simplest and most widely used class of antenna.It ...
- ocp 1Z0-042 61-120题解析
61. View the Exhibit.Which statement regarding the dept and emp tables is true?A) When you delete a ...
- hbuilder工具快捷键 http://www.qq210.com/shoutu/android
http://www.qq210.com/shoutu/android 创建HTML结构: h 8 (敲h激活代码块列表,按8选择第8个项目,即HTML代码块,或者敲h t Enter)中途换行: ' ...
- windbg命令详解
DLL 该扩展仅在内核模式下使用,即使它是在Ext.dll中的. Windows NT 4.0 Ext.dll Windows 2000 Ext.dll Windows XP和之后 Ext.dll ...
随机推荐
- Windows 安装 gcc
Windows 安装 gcc ① 官网下载 GCC, the GNU Compiler Collection - GNU Project - Free Software Foundation (FSF ...
- k8s replicaset controller分析(2)-核心处理逻辑分析
replicaset controller分析 replicaset controller简介 replicaset controller是kube-controller-manager组件中众多控制 ...
- Coursera Deep Learning笔记 深度卷积网络
参考 1. Why look at case studies 介绍几个典型的CNN案例: LeNet-5 AlexNet VGG Residual Network(ResNet): 特点是可以构建很深 ...
- 如何配置log4Net
之前曾经用过几次,但是每次都是用完就忘了,下次再用的时候要baidu半天,这次弄通之后直接记下来. 步骤如下. 1. 安装log4Net,直接用NuGet, Install-Package log4N ...
- win10安装git fatal: open /dev/null or dup failed: No such file or directory错误解决方法
原因看大家意思应该是 非即插即用驱动文件null.sys问题. 网上有很多方案.最后试了一个可行的. 替换 windows/system32/drivers/null.sys为网盘中的文件即可. 链 ...
- [no code][scrum meeting] Beta 12
$( "#cnblogs_post_body" ).catalog() 例会时间:5月27日11:30,主持者:乔玺华 一.工作汇报 人员 昨日完成任务 明日要完成的任务 乔玺华 ...
- [BZOJ4399]魔法少女LJJ----------线段树进阶
感谢线段树进阶,给了我重新做人的机会.---------------某不知名OIer,Keen_z Description 题目描述 在森林中见过会动的树,在沙漠中见过会动的仙人掌过后,魔法少女LJJ ...
- 洛谷 P2252 [SHOI2002]取石子游戏|【模板】威佐夫博弈
链接: P2252 [SHOI2002]取石子游戏|[模板]威佐夫博弈 前言: 第一眼大水题,第二眼努力思考,第 N 眼我是大水逼. 题意: 不看题目标题都应该能看出来是取石子类的博弈论. 有两堆石子 ...
- web性能检测工具lighthouse
About Automated auditing, performance metrics, and best practices for the web. Lighthouse 可以自动检查Web页 ...
- GoLang设计模式12 - 空对象模式
空对象设计模式是一种行为型设计模式,主要用于应对空对象的检查.使用这种设计模式可以避免对空对象进行检查.也就是说,在这种模式下,使用空对象不会造成异常. 空对象模式的组件包括: Entity:接口,定 ...