hdu 5883 The Best Path


The Best Path

Time Limit: 9000/3000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others)
Total Submission(s): 801    Accepted Submission(s): 335


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  P0P1...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 (N100000)  and  M (M500000) , as described above. The  i -th line of the next  N  lines contains an integer  ai(i,0ai10000)  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
 

Source
 

Recommend
wange2014   |   We have carefully selected several similar problems for you:   5899  5897  5896  5895  5894 
题意:给你连通图,问存不存在一条路只经过所有的边一次,如果存在,lucky number为每经过一个点一次就异或一次的最后答案,求最大的lucky number。

思路:连通图经过所有边一次,就是欧拉路的定义。相同的数异或的话是等于0的,所以很容易可以推出每个点的贡献值为((num[i]+1)/2)%2*value[i],num为度数,value为点权值,有一种特殊情况就是形成了欧拉回路,回路的话起点的贡献值要多算一次,也就是还得异或value[i],所以如果存在欧拉回路我们还要枚举每个点作为起点来算。下面给代码:

#include<set>
#include<map>
#include<ctime>
#include<cmath>
#include<stack>
#include<queue>
#include<cstdio>
#include<string>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<functional>
typedef long long LL;
using namespace std;
#define inf 0x3f3f3f3f
#define maxn 100005
typedef long long LL;
int value[maxn],num[maxn];
int main(){
    int t;
    scanf("%d",&t);
    while(t--){
        int n,m;
        scanf("%d%d",&n,&m);
        memset(num,0,sizeof(num));
        for(int i=1;i<=n;i++){
            scanf("%d",&value[i]);
        }
        for(int i=0;i<m;i++){
            int u,v;
            scanf("%d%d",&u,&v);
            num[u]++;
            num[v]++;
        }
        int sum=0;
        for(int i=1;i<=n;i++){
            if(num[i]%2){
                sum++;
            }
        }
        if(sum!=0&&sum!=2){
            printf("Impossible\n");
        }
        else{
            int ans=0;
            for(int i=1;i<=n;i++){
                if(((num[i]+1)/2)%2){
                    ans^=value[i];
                }
            }
            if(!sum){
                int re=0;
                for(int i=1;i<=n;i++){
                    int now=ans^value[i];
                    re=max(now,re);
                }
                ans=re;
            }
            printf("%d\n",ans);
        }
    }
}


第五届广西省大学生程序设计竞赛K Kirby's challenge(AC代码) 分数 300 作者 Colin 单位 杭州电子科技大学 Description Recently, Colin bought a Switch for Eva. And they are playing "Kirby and the Forgotten Land". In a challenge mission, Kirby is in a 4×n grid. The row of it is numbered from 1 to 4, and the column of it is numbered from 1 to n. There are many keys in this grid. Let a x,y ​ represent the status of cell (x,y). If a x,y ​ =1, there is a key in (x,y). If a x,y ​ =0, there is no key in (x,y). Kirby starts at (1,1), and should reach (4,n). Moreover, Kirby must collect all the keys in the grid to open the door in (4,n). Kirby will collect the key at (x,y) when Kirby reach (x,y). Of course, Kirby will collect the key at (1,1) at the beginning. In a second, Kirby can move from (x,y) to (x+1,y),(x,y+1),(x−1,y). Or Kirby can stay at (x,y) and throw a returnable flying weapon(boomerang) to collect keys in the flying path. Kirby has two ways to throw the weapon. As the picture shows: image-20220604213457062.png The flying path is represented as the grey cells, so keys in the grey cells can be collected by the weapon. In a second, Kirby can only choose one way to throw the weapon, but Kirby can throw the weapon multiple times at (x,y) if necessary. Notice: Kirby can't get off the grid, but the weapon can fly outside the grid and keep the flying path. Please write a program to help Colin and Eva find the shortest time to complete the challenge mission, so that they can get more rewards. Input The first line contains one integer n (1≤n≤100). In the next 4 lines, the x-th line contains n integers a x,1 ​ ,a x,2 ​ ,⋯,a x,n ​ (0≤a x,y ​ ≤1). Output Print one integer representing the minimum number of seconds required to complete the challenge mission. Sample input 1 5 1 1 1 0 0 0 1 0 1 0 0 0 1 0 0 0 0 0 0 1 output 1 8 The best solution is: Spend 1 second to throw the weapon in the second way at (1,1), and spend 7 seconds to reach (4,5). 代码长度限制 16 KB 时间限制 1000 ms 内存限制 512 MB 栈限制 131072 KB
最新发布
08-09
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值