本文链接:http://www.cnblogs.com/Ash-ly/p/5932748.html

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5883

思路:

  先判断原图是否是欧拉回路或者欧拉通路.是的话如果一个点的度数除以2是奇数则可以产生一个XOR贡献值.之后如果是欧拉通路, 则答案是固定的,起点和终点需要多产生一次贡献值. 如果是欧拉回路, 则需要枚举起点.

代码:

 #include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <cmath> using namespace std;
typedef long long LL;
const int MAXN = ;
const int MAXE = ;
int a[MAXN + ], deg[MAXN + ], pre[MAXN + ], t, n, m; int Find(int x) { return x == pre[x] ? x : pre[x] = Find(pre[x]); } void mix(int x, int y) {
int fx = Find(x), fy = Find(y);
if(fx != fy) pre[fx] = fy;
} int isEulr(int n) {
int cnt1 = , cnt2 = ;
for(int i = ; i <= n; i++) {
if(deg[i] & ) cnt1++;
if(pre[i] == i) cnt2++;
}
if( (cnt1 == || cnt1 == ) && cnt2 == ) return cnt1; //cnt1 为 0 代表欧拉回路, 为 2 代表欧拉通路
return -;
} int main(){
scanf("%d", &t);
while(t--) {
memset(a, , sizeof(a));
memset(deg, , sizeof(deg)); scanf("%d%d", &n, &m);
for(int i = ; i <= n; i++) scanf("%d", &a[i]);
for(int i = ; i <= n; i++) pre[i] = i;
int u, v, k;
for(int i = ; i < m; i++) {
scanf("%d%d", &u, &v);
deg[u]++, deg[v]++;
mix(u, v);
}
if( (k = isEulr(n) ) >= ) {
int ans = ;
for(int i = ; i <= n; i++) ans ^= ( (deg[i] / ) & ? a[i] : ) ;
if(k == )for(int i = ; i <= n; i++) { if(deg[i] & ) ans ^= a[i]; }//欧拉通路,起点和终点需要多XOR一次
else for(int i = ; i <= n; i++) ans = max(ans, ans ^ a[i]); //欧拉回路, 枚举下起点
printf("%d\n", ans);
}
else printf("Impossible\n");
}
return ;
}

最新文章

  1. Mindmanager安装
  2. mac系统,git上刚刚checkout出来的文件,一检查,发现已经被修改过了,怎么破???
  3. 英文分词算法(Porter stemmer)
  4. maven实战_01_搭建maven开发环境
  5. 解压jar
  6. iPad用户使用Mac和Windows应用软件-记Parallels Access使用体验
  7. hdu2021(很闲~~)
  8. 【LeetCode】6 - ZigZag Conversion
  9. HDU2838Cow Sorting(树状数组)
  10. 利用AVL树实现搬箱问题的best fit策略
  11. NopCommerce架构分析(转载)
  12. google base之LockImpl
  13. Oracle数据库的启动和关闭实例
  14. USB自定义HID设备实现-STM32
  15. 从.Net到Java学习第十二篇——SpringBoot+JPA提供跨域接口
  16. Socks5 RFC1928协议中文版
  17. centos7配置openldap服务器
  18. backbone学习笔记:模型(Model)(1)基础知识
  19. 在CANopen网络中通过LSS服务设置节点地址和网络波特率
  20. Directly output the object name

热门文章

  1. 通过循环判断size()清理queue的问题
  2. Google Map API使用详解(一)——Google Map开发背景知识
  3. SSM框架整合遇到的问题
  4. 基本控件文档-UITableView---iOS-Apple苹果官方文档翻译
  5. 聊聊spring的那些扩展机制
  6. JFinal向客户端渲染图片的方法
  7. MSSQL ADO.NET
  8. Fiddler 抓包工具总结(转)
  9. MAC泛洪攻击
  10. python实战===python程序打包成exe