标签:div logs 没有 sample 树形dp 城市 else 编号 top
#include<cstring> #include<cstdio> #include<cmath> #include<stack> #include<iostream> #include<algorithm> using namespace std; inline const int Read() { int Num=0,Sgn=1; char ch=getchar(); while(!isdigit(ch)){if(ch==‘-‘)Sgn=-1;ch=getchar();} while(isdigit(ch)){Num=(Num<<1)+(Num<<3)+ch-‘0‘;ch=getchar();} return Num*Sgn; } struct Edge { int Next,To; }e[200005]; int h[200005]={0},Cnt=0; void Addedge(int x,int y){e[++Cnt]=(Edge){h[x],y}; h[x]=Cnt;} int a[200005]={0}; double K; int N; int Scnt=0; int DFN[200005]={0},Lowlink[200005]={0}; int Cir[200005]={0},Belong[200005]={0},Prt[200005]={0}; int f[200005][2]={0},g[200005][2]={0}; stack<int>Sta; void Tarjan(int x) { Scnt++; DFN[x]=Scnt; Lowlink[x]=Scnt; Sta.push(x); for(int i=h[x];i;i=e[i].Next) { int y=e[i].To; if(!DFN[y]) { Prt[y]=x; Tarjan(y); Lowlink[x]=min(Lowlink[x],Lowlink[y]); } else if(Prt[x]!=y) Lowlink[x]=min(Lowlink[x],DFN[y]); } if(Lowlink[x]==DFN[x]) { if(Sta.top()==x) { Sta.pop(); return; } int t; do { t=Sta.top(); Sta.pop(); Cir[++Cir[0]]=t; Belong[t]=1; }while(t!=x); } } void DFS(int x) { f[x][0]=0; f[x][1]=a[x]; for(int i=h[x];i;i=e[i].Next) { int y=e[i].To; if(Prt[x]!=y&&!Belong[y]) { Prt[y]=x; DFS(y); f[x][0]+=max(f[y][1],f[y][0]); f[x][1]+=f[y][0]; } } } int main() { N=Read(); for(int i=1;i<=N;i++) a[i]=Read(); for(int i=1;i<=N;i++) { int Tx=Read(),Ty=Read(); Addedge(Tx+1,Ty+1); Addedge(Ty+1,Tx+1); } scanf("%lf",&K); Tarjan(1); int M=Cir[0]; memset(Prt,0,sizeof(Prt)); for(int i=1;i<=M;i++) DFS(Cir[i]); for(int i=1;i<=M;i++) { g[i][0]=f[Cir[i]][0]; g[i][1]=f[Cir[i]][1]; } f[2][0]=g[1][0]+g[2][0]; f[2][1]=g[1][0]+g[2][1]; for(int i=3;i<=M;i++) { f[i][1]=f[i-1][0]+g[i][1]; f[i][0]=max(f[i-1][0],f[i-1][1])+g[i][0]; } int Ans=0; Ans=max(f[M][1],max(Ans,f[M][0])); f[2][0]=g[1][1]+g[2][0]; f[2][1]=-0x3f3f3f3f; for(int i=3;i<=M;i++) { f[i][0]=max(f[i-1][0],f[i-1][1])+g[i][0]; f[i][1]=f[i-1][0]+g[i][1]; } Ans=max(Ans,f[M][0]); printf("%.1lf\n",(double)Ans*K); return 0; }
一开始忘了环形要跑两遍...真是⑨一般的错误啊(笑)
标签:div logs 没有 sample 树形dp 城市 else 编号 top
原文地址:http://www.cnblogs.com/Kaga/p/7040348.html