hdu 5833(欧拉路)
The Best Path
Time Limit: 9000/3000 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others)
Total Submission(s): 18 Accepted Submission(s): 8
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?
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.
3 2
3
4
5
1 2
2 3
4 3
1
2
3
4
1 2
2 3
2 4
Impossible
有向欧拉通路:起点:出度-入度=1,终点:入度-出度=1,其它点:入度==出度
有向欧拉回路:所有点:入度==出度
无向欧拉通路:仅有两个奇度点
无向欧拉回路:无奇度点
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
typedef long long LL;
const int N = ;
int a[N];
int father[N];
int degree[N];
int _find(int x)
{
if(x!=father[x]) father[x] = _find(father[x]);
return father[x];
}
void Union(int a,int b)
{
int x = _find(a);
int y = _find(b);
if(x==y) return ;
father[x] = y;
}
void init(int n)
{
for(int i=; i<=n; i++)
{
father[i] = i;
degree[i] = ;
}
}
int main()
{
int tcase,n,m;
scanf("%d",&tcase);
while(tcase--)
{
scanf("%d%d",&n,&m);
init(n);
for(int i=; i<=n; i++)
{
scanf("%d",&a[i]);
}
for(int i=; i<=m; i++)
{
int u,v;
scanf("%d%d",&u,&v);
degree[u]++;
degree[v]++;
Union(u,v);
}
int ans = ;
for(int i=; i<=n; i++)
{
if(degree[i]>)
{
if(_find(i)==i) ans++;
}
}
///连通分量个数
if(ans>)
{
printf("Impossible\n");
continue;
}
ans = ;
for(int i=; i<=n; i++)
{
if(degree[i]%!=) ans++;
}
///判断是否为欧拉路
if(ans!=&&ans!=)
{
printf("Impossible\n");
continue;
}
LL res = ;
if(ans==)
{
for(int i=; i<=n; i++)
{
int K = degree[i]/;
if(degree[i]!=&&K%==){
res = res^a[i];
}
}
LL MAX = -;
for(int i=; i<=n; i++)
{
int K = degree[i]/;
if(degree[i]!=){
MAX = max(MAX,res^a[i]);
}
}
res = MAX;
}
else
{
for(int i=; i<=n; i++)
{
int K = degree[i]/;
if(degree[i]%==&&K%==)
{
res = res^a[i];
}
if(degree[i]%==)
{
K = (degree[i]+)/;
if(K%==)
res = res^a[i];
}
}
}
printf("%lld\n",res);
}
return ;
}
hdu 5833(欧拉路)的更多相关文章
- HDU 5883 The Best Path (欧拉路或者欧拉回路)
题意: n 个点 m 条无向边的图,找一个欧拉通路/回路使得这个路径所有结点的异或值最大. 析:由欧拉路性质,奇度点数量为0或2.一个节点被进一次出一次,度减2,产生一次贡献,因此节点 i 的贡献为 ...
- 欧拉路&&欧拉回路 概念及其练习
欧拉路: 如果给定无孤立结点图G,若存在一条路,经过图中每边一次且仅一次,这条路称为欧拉路: 如果给定无孤立结点图G,若存在一条回路,经过图中每边一次且仅一次,那么该回路称为欧拉回路. 存在欧拉回路的 ...
- The Best Path(HDU5883)[欧拉路]2016青岛online
题库链接:http://acm.hdu.edu.cn/showproblem.php?pid=5883 欧拉回路裸题,第一次接触欧拉路的我是真的长见识了^-^ 懂了欧拉路这道题就是没什么问题了,欧拉路 ...
- 洛谷P1341 无序字母对[无向图欧拉路]
题目描述 给定n个各不相同的无序字母对(区分大小写,无序即字母对中的两个字母可以位置颠倒).请构造一个有n+1个字母的字符串使得每个字母对都在这个字符串中出现. 输入输出格式 输入格式: 第一行输入一 ...
- POJ1386Play on Words[有向图欧拉路]
Play on Words Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 11846 Accepted: 4050 De ...
- hdu1161 欧拉路
欧拉路径是指能从一个点出发能够“一笔画”完整张图的路径:(每条边只经过一次而不是点) 在无向图中:如果每个点的度都为偶数 那么这个图是欧拉回路:如果最多有2个奇数点,那么出发点和到达点必定为该2点,那 ...
- UVA10054The Necklace (打印欧拉路)
题目链接 题意:一种由彩色珠子组成的项链.每个珠子的两半由不同的颜色组成.相邻的两个珠子在接触的地方颜色相同.现在有一些零碎的珠子,需要确定他们是否可以复原成完整的项链 分析:之前也没往欧拉路上面想, ...
- 洛谷 P1341 无序字母对 Label:欧拉路 一笔画
题目描述 给定n个各不相同的无序字母对(区分大小写,无序即字母对中的两个字母可以位置颠倒).请构造一个有n+1个字母的字符串使得每个字母对都在这个字符串中出现. 输入输出格式 输入格式: 第一行输入一 ...
- POJ 1637 Sightseeing tour (混合图欧拉路判定)
Sightseeing tour Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 6986 Accepted: 2901 ...
随机推荐
- 表格隔行变色_CSS实现鼠标悬停高亮
<!doctype html> <html> <head> <meta http-equiv="content-type" content ...
- 解题:JLOI 2016 侦查守卫
题面 经典的$cov-unc$树形dp(这词是你自己造的吧=.=) 设$cov[i][j]$表示覆盖完$i$的子树后至少向外再覆盖$j$层的最小代价,$unc[i][j]$表示$i$的子树中还剩下至少 ...
- python中如何优雅续行和换行
http://note.youdao.com/noteshare?id=8dbcb93991a89a6cfcd95580ed2198f0
- duilib 修复CTreeViewUI控件动态添加子控件时,对是否显示判断不足的bug
转载请说明出处,谢谢~~:http://blog.csdn.net/zhuhongshu/article/details/42264947 这个bug我在仿酷狗开发日志里提到过,不过后来发现修复的不够 ...
- Linux centos7下设置Tomcat开机自启动
1,centos7 使用 systemctl 替换了 service命令 参考:redhat文档: https://access.redhat.com/documentation/en-US/Red_ ...
- hdu4699-Editor
Sample Input 8 I 2 I -1 I 1 Q 3 L D R Q 2 Sample Output 2 3 发现IDLR四种操作都在光标处发生,且操作完成后光标至多移动1个位置,根据这种“ ...
- NOIP模拟赛12
期望得分:100+100+50=250 实际得分:100+100+30=230 A 约数之和(count.pas/c/cpp) TL:1S ML:128MB[Description]我们用 D(x)表 ...
- Digging(DP)
ZOJ Problem Set - 3689 Digging Time Limit: 2 Seconds Memory Limit: 65536 KB When it comes to th ...
- WPF集合控件实现分隔符(ItemsControl Separator)
在WPF的集合控件中常常需要在每一个集合项之间插入一个分隔符样式,但是WPF的ItemsControl没有相关功能的直接实现,所以只能考虑曲线救国,经过研究,大概想到了以下两种实现方式. 先写出Ite ...
- Java并发编程学习路线
一年前由于工作需要从微软技术栈入坑Java,并陆陆续续做了一个Java后台项目,目前在搞Scala+Java混合的后台开发,一直觉得并发编程是所有后台工程师的基本功,所以也学习了小一年Java的并发工 ...