【题意】给定n个点和m条无向边(有重边无自环),每个点有权值di=-1,0,1,要求仅保留一些边使得所有点i满足:di=-1或degree%2=di,输出任意方案。

【算法】数学+搜索

【题解】

最关键的一步:★【%2转取反】

首先考虑在树上做这样的问题,就显得十分朴素了。每当选择一条边,边的两端点权值就会取反,所以做一次DFS,对儿子权值(变化后)为1的点连边,自身取反,儿子都处理完毕后再把自身的新权值反馈上去。这样本质上等同于,所有点权为1的点都通过路径将取反信息传递到根,若最终根权为0则问题解决且得到一种路径方案,若根权为1则需要换一个di=-1的点作为根重新dfs,若无则无解。(实际操作中直接先找-1的点DFS,没有再找任意一个判断有无解)

最后考虑图转树的正确性,需要论证一下两点:

1.图上的环没有影响:对于一个环,环边对环中所有点的度均为2,此时可以一起删去则模2不受影响。

2.图转成任意生成树没有影响:因为转成树后不管树长成什么样,都是所有的di=1的点在传递信息,简单的说,答案有解当且仅当【di=1的点为偶数个】或【di=1的点为奇数个且存在di=-1的点】,所以生成树的形态只是为了找到一个可行方案来输出,不会影响答案。

#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
const int maxn=;
struct edge{int v,from;}e[maxn*];
int first[maxn],d[maxn],n,m,ans=,tot=;
bool vis[maxn],a[maxn*]; void insert(int u,int v){
tot++;e[tot].v=v;e[tot].from=first[u];first[u]=tot;
tot++;e[tot].v=u;e[tot].from=first[v];first[v]=tot;
}
int dfs(int x){
vis[x]=;
for(int i=first[x];i;i=e[i].from)if(!vis[e[i].v]){
if(dfs(e[i].v)&){
a[i]=;ans++;
if(d[x]!=)d[x]=-d[x];
}
}
return d[x];
}
int main(){
scanf("%d%d",&n,&m);
int point=;
for(int i=;i<=n;i++){scanf("%d",&d[i]);if(d[i]==-)point=i,d[i]=;}
int u,v;
for(int i=;i<=m;i++){
scanf("%d%d",&u,&v);
insert(u,v);
}
if(point)dfs(point);
else if(dfs()&){printf("-1");return ;}
printf("%d\n",ans);
for(int i=;i<=tot;i+=)if(a[i]||a[i+])printf("%d ",(i+)/);
return ;
}

【CodeForces】841D. Leha and another game about graph(Codeforces Round #429 (Div. 2))的更多相关文章

  1. 【CodeForces】841C. Leha and Function(Codeforces Round #429 (Div. 2))

    [题意]定义函数F(n,k)为1~n的集合中选择k个数字,其中最小数字的期望. 给定两个数字集A,B,A中任意数字>=B中任意数字,要求重组A使得对于i=1~n,sigma(F(Ai,Bi))最 ...

  2. 【动态规划】Vijos P1313 金明的预算方案(NOIP2006提高组第二题)

    题目链接: https://vijos.org/p/1313 题目大意: m(m<=32000)金钱,n(n<=60)个物品,花费vi,价值vi*ci,每个物品可能有不超过2个附件,附件没 ...

  3. 【转载】一分钟了解两阶段提交2PC(运营MM也懂了)

    上一期分享了"一分钟了解mongoDB"[回复"mongo"阅读],本期将分享分布式事务的一种实现方式2PC. 一.概念 二阶段提交2PC(Two phase ...

  4. (原创)【MAUI】一步一步实现“悬浮操作按钮”(FAB,Floating Action Button)

    一.前言 MAUI,跨平台的 GUI 框架,基本介绍本文不再赘述. 话不多说,既然可以跨平台,那么我们就来实现一个在移动端很常用的控件:悬浮操作按钮(FAB,Floating Action Butto ...

  5. 【BZOJ-2502】清理雪道 有上下界的网络流(有下界的最小流)

    2502: 清理雪道 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 594  Solved: 318[Submit][Status][Discuss] ...

  6. 【转】浅谈Java中的hashcode方法(这个demo可以多看看)

    浅谈Java中的hashcode方法 哈希表这个数据结构想必大多数人都不陌生,而且在很多地方都会利用到hash表来提高查找效率.在Java的Object类中有一个方法: public native i ...

  7. 【HTML5】HTML5中video元素事件详解(实时监测当前播放时间)

    html 代码..video后边几个元素,可处理ios 系统的兼容性 <video id="myVideo" controls="controls" po ...

  8. 【PHP】php生成一个不重复的数字(订单号、会员号)

    1.目的:利用php的do .. while 生成一个不重复的字符串或者数组,比如(订单号.会员号) 2.不废话,代码来: $repeat_order = array(); do{ $ordersn ...

  9. 【jQuery】学习jQuery插件的使用与写法(表单验证插件-validation)

    最新最全的插件可以从jQuery官方网站的插件板块下载,网站地址为:http://plugins.jquery.com/ Validation优点:内置验证规则:自定义验证规则:简单强大的验证信息提示 ...

随机推荐

  1. http报文和浏览器缓存机制

    目录 1. 请求报文 1.1请求行 1.2 请求头 一些常用的请求头信息 2. 响应报文 2.1 状态行 1> 响应状态码 2> 常见的响应状态码 2.2 响应头 3. 浏览器缓存 3.1 ...

  2. abtest-system后台系统设计与搭建

    本文来自网易云社区 作者:刘颂 1 项目背景: 2017年5月:客户端提出增加https&dns以及双cdn业务功能 后台配合实现使用disconf配置 针对不同的域名或者请求配置不同的htt ...

  3. 2.Linux文件和目录

    1. 目录和路径 linux下比较特殊的目录: . 代表此层目录 .. 代表上一层目录 - 代表前一个工作目录 ~ 代表『目前使用者身份』所在的home目录 ~account 代表 account 这 ...

  4. Python 常见的错误类型和继承关系

    Python所有的错误都是从BaseException类派生 BaseException +-- SystemExit +-- KeyboardInterrupt +-- GeneratorExit ...

  5. CCF-NOIP-2018 提高组(复赛) 模拟试题(九)(2018 CSYZ长沙一中)

    T1 Circle [问题描述] 小 w 的男朋友送给小 w 一个 n 个点 m 条边的图,并且刁难小 w 要她找出点数最少的正环. 小 w 不会做,于是向你求助. [输入格式] 第一行两个整数\(n ...

  6. hibernate延时加载机制

    延迟加载: 延迟加载机制是为了避免一些无谓的性能开销而提出来的,所谓延迟加载就是当在真正需要数据的时候,才真正执行数据加载操作.在Hibernate中提供了对实体对象的延迟加载以及对集合的延迟加载,另 ...

  7. 配置Android应用开发环境

    详解JRE.JDK.SDK.ADT请点击辨析ADK&JVM&JRE&JDK&ADT 一.安装JDK 开发 Android应用程序的时候,仅有Java运行环境(Java ...

  8. Linux yum安装MySQL5.7,及远程连接mysql(亲测有效!)

    一.安装配置MySQL的yum源 # 安装MySQL的yum源,下面是RHEL6系列的下载地址 rpm -Uvh http://dev.mysql.com/get/mysql-community-re ...

  9. python 调用RESTFul接口

    本周需要将爬虫爬下来的数据入库,因为之前已经写好PHP的接口的,可以直接通过python调用PHP接口来实现,所以把方法总结一下. //python编码问题,因为好久用,所以很容易出现 # -*- c ...

  10. 【iOS开发】NSOperation简单介绍

    iOS开发多线程篇—NSOperation简单介绍 一.NSOperation简介 1.简单说明 NSOperation的作⽤:配合使用NSOperation和NSOperationQueue也能实现 ...