HDU 5883 The Best Path

欧拉回路。

首先根据连通性以及欧拉回路存在条件判掉不可能的情况,剩下的情况都存在解。

如果有两个奇度的点,那么答案是唯一的。(可以利用度来求解每一个点被走了几次)

如果全是偶数度的点,那么答案不唯一,但是去掉起点被多访问一次的答案也是唯一的,因此只需枚举起点就可以了。

#pragma comment(linker, "/STACK:1024000000,1024000000")
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<vector>
#include<map>
#include<set>
#include<queue>
#include<stack>
#include<iostream>
using namespace std;
typedef long long LL;
const double pi=acos(-1.0),eps=1e-6;
void File()
{
    freopen("D:\\in.txt","r",stdin);
    freopen("D:\\out.txt","w",stdout);
}
template <class T>
inline void read(T &x)
{
    char c=getchar(); x=0;
    while(!isdigit(c)) c=getchar();
    while(isdigit(c)) {x=x*10+c-‘0‘; c=getchar();}
}

const int maxn=100010;
int T,r[maxn],a[maxn],cnt[maxn],n,m;
int fa[maxn],sz;

int Find(int x)
{
    if(x!=fa[x]) fa[x]=Find(fa[x]);
    return fa[x];
}

int main()
{

    scanf("%d",&T);
    while(T--)
    {
        scanf("%d%d",&n,&m); sz=n;
        memset(cnt,0,sizeof cnt);
        memset(r,0,sizeof r);
        for(int i=1;i<=n;i++) fa[i]=i;
        for(int i=1;i<=n;i++) scanf("%d",&a[i]);
        for(int i=1;i<=m;i++)
        {
            int u,v; scanf("%d%d",&u,&v);
            r[u]++; r[v]++;
            int fu=Find(u),fv=Find(v);
            if(fu!=fv)
            {
                fa[fu]=fv;
                sz--;
            }
        }

        if(sz!=1) printf("Impossible\n");
        else
        {
            int sum=0,p1=-1,p2=-1;
            for(int i=1;i<=n;i++)
            {
                if(r[i]%2==1)
                {
                    sum++;
                    if(p1==-1) p1=i;
                    else p2=i;
                }
            }

            if(sum!=0&&sum!=2)
            {
                printf("Impossible\n");
                continue;
            }

            int ttt=0;
            for(int i=1;i<=n;i++)
            {
                int xx=(r[i]+1)/2;
                if(xx%2==0) continue;
                ttt=ttt^a[i];
            }

            int ans=0;
            if(sum==2) ans=ttt;
            else
            {
                for(int i=1;i<=n;i++)
                    ans=max(ans,ttt^a[i]);
            }
            printf("%d\n",ans);
        }
    }
    return 0;
}
时间: 2024-12-13 05:06:57

HDU 5883 The Best Path的相关文章

HDU 5883 The Best Path (欧拉路或者欧拉回路)

题意: n 个点 m 条无向边的图,找一个欧拉通路/回路使得这个路径所有结点的异或值最大. 析:由欧拉路性质,奇度点数量为0或2.一个节点被进一次出一次,度减2,产生一次贡献,因此节点 i 的贡献为 i 点的度数除以2然后再模22??degree?u????⌋ mod 2)∗a?u??.欧拉回路的起点贡献多一次, 欧拉通路的起点和终点贡献也多一次.因此如果是欧拉回路的话枚举一下起点就好了. 但是这个题有坑,就是有孤立点,这些点可以不连通,....被坑死了,就是这一点,到最后也没过...伤心 代码

HDU - 2290 Find the Path(最短路)

HDU - 2290 Find the Path Time Limit: 5000MS   Memory Limit: 64768KB   64bit IO Format: %I64d & %I64u Submit Status Description Scofield is a hero in American show "Prison Break". He had broken the prison and started a big runaway. Scofield h

HDU 5883 F - The Best Path 欧拉通路 &amp; 欧拉回路

给定一个图,要求选一个点作为起点,然后经过每条边一次,然后把访问过的点异或起来(访问一次就异或一次),然后求最大值. 首先为什么会有最大值这样的分类?就是因为你开始点选择不同,欧拉回路的结果不同,因为是回路,所以你的开始点就会被访问多一次,所以如果是欧拉回路的话,还需要O(n)扫一次,枚举每个点作为起点. 欧拉通路的话,结果是固定的,因为只能从奇数度小的那个点作为起点,奇数度大的那个点作为终点. 关于点的访问次数:anstime  = Degree[i] / 2; //如果是奇数的,还要加上一.

HDU 5492 Find a path DP

Find a path Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=5492 Description Frog fell into a maze. This maze is a rectangle containing N rows and M columns. Each grid in this maze contains a number, which is cal

hdu 4725 The Shortest Path in Nya Graph(建图+优先队列dijstra)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4725 题意:有n个点和n层,m条边,每一层的任意一个点都可以花费固定的值到下一层或者上一层的任意点 然后m条边链接的点可以花费给出的值进行转移,最后问从i点到n点最少要花费多少. 这题点的个数有100000,层数也是100000,不算额外边暴力建边肯定要爆. 所以可以把层数也当成一个点比如说i点在j层于是n+j就与i链接花费0然后i点可以和上下层任意一个点链接 及i与n+j+1链接i与n+j-1链接

【动态规划】HDU 5492 Find a path (2015 ACM/ICPC Asia Regional Hefei Online)

题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5492 题目大意: 一个N*M的矩阵,一个人从(1,1)走到(N,M),每次只能向下或向右走.求(N+M-1)ΣN+M-1(Ai-Aavg)2最小.Aavg为平均值. (N,M<=30,矩阵里的元素0<=C<=30) 题目思路: [动态规划] 首先化简式子,得原式=(N+M-1)ΣN+M-1(Ai2)-(ΣN+M-1Ai)2 f[i][j][k]表示走到A[i][j]格子上,此时前i+j-1

HDU 6223 Infinite Fraction Path(BFS+剪枝)

The ant Welly now dedicates himself to urban infrastructure. He came to the kingdom of numbers and solicited an audience with the king. He recounted how he had built a happy path in the kingdom of happiness. The king affirmed Welly's talent and hoped

HDU 5883 欧拉路径异或值最大 水题

The Best Path Time Limit: 9000/3000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others)Total Submission(s): 2104    Accepted Submission(s): 841 Problem Description Alice is planning her travel route in a beautiful valley. In this valley, th

hdu 6223 Infinite Fraction Path

题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=6223 题意:给定长度为n的一串数字S,现在要按照一种规则寻找长度为n的数字串,使得该数字串的字典序最大.规则:从数字串S的某一个下标为x的数字出发,可以到达的下一个数字是下标为(x*x+1)%n的数字. 思路:BFS+剪枝.剪枝技巧: 1:遍历到某一层的节点时,记录已经到达过的节点,下次如果还经过就直接不考虑. 2:当前遍历到的某一层节点的数字较之前的小,直接不考虑. AC代码: #define _