The Best Path

Time Limit: 9000/3000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others)

Total Submission(s): 798    Accepted Submission(s): 332

Problem Description
Alice is planning her travel route in a beautiful valley. In this valley, there are N lakes,
and M rivers
linking these lakes. Alice wants to start her trip from one lake, and enjoys the landscape by boat. That means she need to set up a path which go through every river exactly once. In addition, Alice has a specific number (a1,a2,...,an)
for each lake. If the path she finds is P0→P1→...→Pt,
the lucky number of this trip would be aP0XORaP1XOR...XORaPt.
She want to make this number as large as possible. Can you help her?
 
Input
The first line of input contains an integer t,
the number of test cases. t test
cases follow.



For each test case, in the first line there are two positive integers N (N≤100000) and M (M≤500000),
as described above. The i-th
line of the next N lines
contains an integer ai(∀i,0≤ai≤10000) representing
the number of the i-th
lake.



The i-th
line of the next M lines
contains two integers ui and vi representing
the i-th
river between the ui-th
lake and vi-th
lake. It is possible that ui=vi.
 
Output
For each test cases, output the largest lucky number. If it dose not have any path, output "Impossible".
 
Sample Input
2
3 2
3
4
5
1 2
2 3
4 3
1
2
3
4
1 2
2 3
2 4
 
Sample Output
2
Impossible
 

题目的意思是遍历所有边,算出每个经历过的点异或起来最大值

首先并查集算出集合数,大于1不可能;然后判欧拉回路,若度为奇的大于2,则不可能,若度为奇的等于二,则路线固定,其所经历所有点,若等于零则枚举起点

这里有个小技巧,a^a=0,0^a=a 所以异或时重复经历的点只要判经历次数是否为奇数即可

另外有个坑的是位运算优先级较低,你写

for(int i=1; i<=n; i++)
{
if(ans^a[i]>mx)
mx=ans^a[i];
}

就会wa,它先会判断>再异或

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
using namespace std;
#define inf 0x3f3f3f3f
#define mod 10000007
#define maxn 100005 int a[maxn];
int p[maxn];
int pre[maxn];
int n,m,sz; int fin(int x)
{
if(x != pre[x])
pre[x] = fin(pre[x]);
return pre[x];
} void unio(int x,int y)
{
int x1=fin(x);
int x2=fin(y);
if(x1!=x2)
{
pre[x1]=x2;
sz--;
}
} int main()
{
int o,u,v;
while(~scanf("%d",&o))
{
while(o--)
{
scanf("%d%d",&n,&m);
for(int i=1; i<=n; i++)
{
scanf("%d",&a[i]);
}
memset(p,0,sizeof(p));
for(int i=1; i<=n; i++)
{
pre[i]=i;
}
sz=n; for(int i=0; i<m; i++)
{
scanf("%d%d",&u,&v);
unio(u,v);
p[u]++;
p[v]++;
} if(sz>1)
{
printf("Impossible\n");
continue;
} int tot=0;
for(int i=1; i<=n; i++)
{
if(p[i]%2==1)
tot++;
}
if(tot>2)
{
printf("Impossible\n");
}
else if(tot==2)
{
int ans=0;
for(int i=1; i<=n; i++)
{
if(((p[i]+1)/2)%2)
ans=ans^a[i];
}
printf("%d\n",ans);
}
else
{
int ans=0;
for(int i=1; i<=n; i++)
{
if(((p[i]+1)/2)%2) ans=ans^a[i];
}
int mx=0;
for(int i=1; i<=n; i++)
{
mx=max(mx,ans^a[i]);
}
printf("%d\n",mx);
}
}
}
return 0;
}


hdu5883 The Best Path 2016-09-21 21:31 92人阅读 评论(0) 收藏的更多相关文章

  1. GitHub项目协作基本步骤 分类: C_OHTERS 2013-09-23 21:31 690人阅读 评论(0) 收藏

    1.查找某个项目,然后Fork 2.打开GitHub For Windows,发现刚才Fork的项目 3.对着项目点击Clone,将之复制至本地 4.使用Eclipse等进行开发,如新增一个文件 5. ...

  2. Poj 2349 Arctic Network 分类: Brush Mode 2014-07-20 09:31 93人阅读 评论(0) 收藏

    Arctic Network Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 9557   Accepted: 3187 De ...

  3. Poj 1050 分类: Translation Mode 2014-04-04 09:31 103人阅读 评论(0) 收藏

    To the Max Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 39058   Accepted: 20629 Desc ...

  4. sscanf 函数 分类: POJ 2015-08-04 09:19 4人阅读 评论(0) 收藏

    sscanf 其实很强大 分类: 纯C技术 技术笔记 2010-03-05 16:00 12133人阅读 评论(4) 收藏 举报 正则表达式stringbuffercurlgoogle 最近在做日志分 ...

  5. python如何使用 os.path.exists()--Learning from stackoverflow 分类: python 2015-04-23 20:48 139人阅读 评论(0) 收藏

    Q&A参考连接 Problem:IOError: [Errno 2] No such file or directory. os.path.exists() 如果目录不存在,会返回一个0值. ...

  6. 排序练习——找出前m大的数字 分类: 排序 2015-06-08 09:33 21人阅读 评论(0) 收藏

    排序练习--找出前m大的数字 Time Limit: 1000ms   Memory limit: 65536K  有疑问?点这里^_^ 题目描述 给定n个数字,找出前m大的数字.   输入  多组输 ...

  7. windows server 2008 R2域中的DC部署 分类: AD域 Windows服务 2015-06-06 21:09 68人阅读 评论(0) 收藏

    整个晚上脑子都有点呆滞,想起申请注册好的博客还从来都不曾打理,上来添添生机.从哪里讲起呢,去年有那么一段时间整个人就陷在域里拔不出来,于是整理了一些文档,害怕自己糊里糊涂的脑子将这些东西会在一觉醒来全 ...

  8. Prime Path 分类: 搜索 POJ 2015-08-09 16:21 4人阅读 评论(0) 收藏

    Prime Path Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 14091 Accepted: 7959 Descripti ...

  9. Hadoop集群日常运维 分类: A1_HADOOP 2015-03-01 21:26 502人阅读 评论(0) 收藏

    (一)备份namenode的元数据 namenode中的元数据非常重要,如丢失或者损坏,则整个系统无法使用.因此应该经常对元数据进行备份,最好是异地备份. 1.将元数据复制到远程站点 (1)以下代码将 ...

随机推荐

  1. .Spark Streaming(上)--实时流计算Spark Streaming原理介

    Spark入门实战系列--7.Spark Streaming(上)--实时流计算Spark Streaming原理介绍 http://www.cnblogs.com/shishanyuan/p/474 ...

  2. oracle内存结构

    一.内存结构 SGA(System Global Area):由所有服务进程和后台进程共享: PGA(Program Global Area):由每个服务进程.后台进程专有:每个进程都有一个PGA. ...

  3. docker registry ui

    https://hub.docker.com/r/parabuzzle/docker-registry-ui/

  4. 如何快速实现一个command

    新建一个类,实现icoomand接口 定义一个委托,为测试方便,先不考虑CanExecute的情况. 越简单越好. 代码如下: public class ExitHandler : ICommand ...

  5. Python的logging,记录log的包

    最近在做自动化测试时,想给他加上日志,所以用到logging的模块,以下是python增加log的几种方式 一.python代码配置方式(当然还有一种是可以多模块通用的一个python代码设置,这个网 ...

  6. sql server profiler 的使用

    sql server profiler  是作为监听sql语句执行的软件, 主要是看NTUserName,system是系统的,看自己数据库的名字.

  7. DP解LCS问题模板及其优化

    LCS--Longest Common Subsequence,即最长公共子序列,一般使用DP来解. 常规方法: dp[i][j]表示字符串s1前i个字符组成的字符串与s2前j个字符组成的字符串的LC ...

  8. codeblocks不支持c++11的有效解决办法

    首先cb支持c++11编程开发,但是不支持编译 看了网上好多,说setting里面设置一下就好了,16.01版本我安装了带ide的不带IDE的,安了好多次,但是就是没有那个选项 找不到c++11那个选 ...

  9. 归并排序/合并排序c++实现

    #include <iostream>#include<string.h> using namespace std;class merges{public:void merge ...

  10. 仿微信客户端 帧布局中加入fragment

    学习内容来自“慕课网” 这里用Fragment来实现APP主界面 思路: 底部横向排列4个LinearLayout,每个LinearLayout包含一个图片按钮和一个文字 1.默认显示第一个功能(微信 ...