Wannafly挑战赛1,2

做了好久了,今天大佬讲题,好厉害,弱鸡只会几道水题。

Treepath

给定一棵n个点的树,问其中有多少条长度为偶数的路径。路径的长度为经过的边的条数。x到y与y到x被视为同一条路径。路径的起点与终点不能相同。

奇数层到奇数层,偶数层到偶数层。

Xorto

给定一个长度为n的整数数组,问有多少对互不重叠的非空区间,使得两个区间内的数的异或和为0。

异或题好厉害,问题变成四个点的异或值为0。

厉害的位置是他的遍历方式O(n*nlogn)

左区间+1个元素,将产生一些新的异或值,有区间探测。(枚举的起点,不重复不遗漏)

#include <bits/stdc++.h>
 
using namespace std;
 
const int maxn = 1e3+5;
int a[maxn];
int sets[3276800];
 
int main()
{
    //freopen("in.txt","r",stdin);
 
    int n;
    cin>>n;
 
    for(int i = 1; i <= n; i++) scanf("%d",&a[i]);
 
    long long cnt = 0;
    for(int i = 1; i <= n; i++) {
        int s = 0;
        for(int j = i; j <=n; j++) {
            s^=a[j];
            cnt+=sets[s];
        }
        s = 0;
        for(int j = i; j >= 1; j--) {
            s^=a[j];
            sets[s]++;
        }
    }
    printf("%lld
",cnt);
 
 
    return 0;
}

MMSet2

给定一棵n个节点的树,点编号为1…n。
Q次询问,每次询问给定一个点集S,令
你需要求出
其中dist(u,v)表示树上路径(u,v)的边数。

答案就是 (点集的直径+1)/2,理由想一想就好,代码待填,嘻嘻~~~

Color

给一个没有重边的二分图, 要求给边染色. 有公共点的边不能同色. 问最少用多少种颜色, 并任意构造一组方案.
 
答案是:度数的最大值。
分析:肯定他是理论的下界,那么怎么才能知道他是理论的上界呢?嘻嘻。跳过,
然后染色。
 
Cut
给你一个长度为n的序列,你每次可以将一个序列分割成两个连续的的子序列,
分割的代价为原序列的总和。
现在允许你在初始时将序列重新排列一次。
问分割成n个长度为1的序列的最大总代价是多少?
 
哈夫曼
 
Travel

精灵王国有N座美丽的城市,它们以一个环形排列在Bzeroth的大陆上。其中第i座城市到第i+1座城市花费的时间为d[i]。特别地,第N座城市到第1座城市花费的时间为d[N]。这些道路都是双向的。

另外,精灵们在数千年的时间里建造了M座传送门,第i座传送门连接了城市u[i]与城市v[i],并且需要花费w[i]的时间通过(可能有两座传送门连接了同一对城市,也有可能一座传送门连接了相同的两座城市)。这些传送门都是双向的。

小S是精灵王国交通部部长,她的职责是为精灵女王设计每年的巡查路线。每次陛下会从某一个城市到达另一个城市,沿路调查每个城市的治理情况,她需要找出一条用时最短的路线。

枚举特殊点。

原文地址:https://www.cnblogs.com/TreeDream/p/7823475.html