题意:给你一张图,给你每个点的权值,要么是-1,要么是1,要么是0。如果是-1就不用管,否则就要删除图中的某些边,使得该点的度数 mod 2等于该点的权值。让你输出一个留边的方案。

首先如果图内有-1,那么必有解。否则如果初始不合法的点数为偶数,那么必有解,否则无解。因为删一条边,要么使图中不合法的点数+2,要么不变,要么-2。

如果有解,构造图的任意一个生成树,如果有-1,就让-1为根,否则任意结点为根。然后从叶子向根定每个点的入度数,由于自底向上,一个结点的儿子边都被处理完后,只需要决定父边是否删除即可。可以想见,根节点不用判,必然合法(前提我们已经判断其有解;如果无解,当然根节点就无法合法咯)。

实际操作时,不用构造生成树,因为DFS,用DFS树即可。

#include<cstdio>
#include<algorithm>
using namespace std;
bool vis[300005];
int v[600005],next[600005],first[300005],e,id[600005];
void AddEdge(int U,int V,int ID){
v[++e]=V;
id[e]=ID;
next[e]=first[U];
first[U]=e;
}
int n,m,d[300005],du[300005],anss[300005],ans;
bool cho[300005];
void dfs(int U,int fa,int fa_edge){
vis[U]=1;
int cnt=0;
for(int i=first[U];i;i=next[i]){
if(!vis[v[i]]){
dfs(v[i],U,id[i]);
if(cho[id[i]]){
++cnt;
}
}
}
if(d[U]!=-1 && cnt%2!=d[U]){
cho[fa_edge]=1;
anss[++ans]=fa_edge;
}
}
int main(){
int x,y;
//freopen("b.in","r",stdin);
int fu1_node=0;
scanf("%d%d",&n,&m);
for(int i=1;i<=n;++i){
scanf("%d",&d[i]);
if(d[i]==-1){
fu1_node=i;
}
}
for(int i=1;i<=m;++i){
scanf("%d%d",&x,&y);
AddEdge(x,y,i);
AddEdge(y,x,i);
++du[x];
++du[y];
}
int cnt=0;
for(int i=1;i<=n;++i){
if(d[i]!=-1 && du[i]%2!=d[i]){
++cnt;
}
}
if(fu1_node){
dfs(fu1_node,0,0);
}
else if(cnt%2==0){
dfs(1,0,0);
}
else{
puts("-1");
return 0;
}
sort(anss+1,anss+ans+1);
printf("%d\n",ans);
for(int i=1;i<ans;++i){
printf("%d ",anss[i]);
}
if(ans){
printf("%d\n",anss[ans]);
}
return 0;
}

最新文章

  1. 了解HTML CSS格式化排版 文字排版
  2. CSS3 笔记二(Gradients)
  3. windows C input 注意
  4. JAVA小记
  5. ABBYY FineReader 12 能够识别哪些文档语言
  6. java-多态性
  7. sql case when 多条件
  8. Asp.Net处理URL空格变%20问题
  9. SCI杂志分区规则
  10. Wi-Fi漫游的工作原理
  11. [置顶] c# datagridview‘s learn
  12. 算法模板——Dinic网络最大流 2
  13. java8新特性,使用流遍历集合
  14. Linux命令行总结
  15. &quot;《算法导论》之‘线性表’&quot;:基于动态分配的数组的顺序表
  16. better-scroll无法滚动的问题。
  17. zombodb 配置设置
  18. 记账本NABCD分析
  19. LDA-线性判别分析(二)Two-classes 情形的数学推导
  20. Hashtable数据存储结构-遍历规则,Hash类型的复杂度为啥都是O(1)-源码分析

热门文章

  1. JS 本地属性与继承属性
  2. poj 2253 Frogger (dijkstra最短路)
  3. EditText中inputType详解
  4. Centos修改镜像为国内的阿里云源或者163源等国内源
  5. 【转】关于Scapy
  6. C++之复制控制
  7. 用selenium 模块控制浏览器
  8. 004_ssh连接慢的问题的解决?
  9. mysql大法
  10. CountDownLatch源码浅析