题意:给出一颗树和m条路径,要求选择尽量多的路径,并且这些路径不相交。
思路:没想到这题是贪心,比较忧伤。首先求一下每对路径的lca,按照lca的层数排序,在深一层的优先级高。那么就可以贪心了,每次选择层数最深的那一个,如果两个端点没有被标记,那么就选择这条路径,把lca的子树都标记掉。
代码:
#pragma comment(linker, "/STACK:1024000000,1024000000")
#include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
#include<algorithm>
#include<map>
#include<queue>
#include<stack>
#include<set>
#include<cmath>
#include<vector>
#define inf 0x3f3f3f3f
#define Inf 0x3FFFFFFFFFFFFFFFLL
#define eps 1e-9
#define pi acos(-1.0)
using namespace std;
typedef long long ll;
const