hdu_5883_The Best Path(欧拉路)

时间:2023-03-09 05:52:20
hdu_5883_The Best Path(欧拉路)

题目链接:hdu_5883_The Best Path

题意:

个点 条无向边的图,找一个欧拉通路/回路使得这个路径所有结点的异或值最大。

题解:

节点 i 的贡献为((du[i] +1/ 2) % 2)* a[i]

如果为欧拉回路,需要枚举一下起点,然后取一下最大

 #include<bits/stdc++.h>
#define F(i,a,b) for(int i=a;i<=b;i++)
using namespace std; const int N=1e5+;
int t,n,m,du[N],a[N],x,y,ans; int T_T(int odd=,int ans=)
{
F(i,,n)if(du[i]&)odd++;
if(odd!=&&odd!=)return -;//不存在欧拉路
F(i,,n)
{
du[i]=(du[i]+)/;
if(du[i]&)ans^=a[i];
}
if(odd==)F(i,,n)ans=max(ans,ans^a[i]);//奇度点为0,存在欧拉回路
return ans;
} int main()
{
scanf("%d",&t);
while(t--)
{
scanf("%d%d",&n,&m);
memset(du,,sizeof(du));
F(i,,n)scanf("%d",a+i);
F(i,,m)scanf("%d%d",&x,&y),du[x]++,du[y]++;
if((ans=T_T())==-)puts("Impossible");else printf("%d\n",ans);
}
return ;
}