#include<iostream> #include<cstdio> #include<cstring> #include<cstdlib> #include<algorithm> using namespace std; ; ]; long long w[maxn]; struct node { long long to,next,value; }way[maxn]; long long tmp; long long tot; long lo…
没考虑可以连着两个不选--直接染色了 实际上是基环森林,对于每棵基环树,dfs找出一个环边,然后断掉这条边,分别对这条边的两端点做一边treedp,取max加进答案里 treedp是设f[u]为选u点,g[u]为不选u点,然后随便转移一下就行了 #include<iostream> #include<cstdio> using namespace std; const int N=1000005; int n,h[N],cnt=1,x,y,eg; long long a[N],f[…