Run ID 作者 问题 语言 测评结果 分数 时间 内存 代码长度 提交时间
28181 liuyile 【BJ】T1 C++ 通过 100 93 MS 21700 KB 2758 2024-04-04 19:04:09

Tests(20/20):


#include <bits/stdc++.h> using namespace std; #define int long long int f[1010][1010]; vector<int>g[1010]; int n,q; int fa[1010]; bool p[1010][1010]; int bel[1010]; vector<int >T[1010]; int w[20][20]; inline void dfs(int u){ T[u].push_back(u); vector<int>P; for(int v:g[u]) if(v!=fa[u]){ fa[v]=u,dfs(v); for(int x:T[v]) T[u].push_back(x); P.push_back(v); } g[u]=P; } bool e[20]; int a[20]; int res=0; inline void DFS(int dep,int r){ if(dep>=g[r].size()){ int k=g[r].size(); int cnt=0; for(int i=0;i<k;i++) if(!e[i]){ a[i]=0; int x=g[r][i]; for(int y:T[x])a[i]=max(a[i],f[x][y]+p[r][y]); cnt+=a[i]; } f[r][r]=max(f[r][r],res+cnt); for(int i=0;i<k;i++) if(!e[i]){ cnt-=a[i]; int x=g[r][i]; for(int y:T[x])f[r][y]=max(f[r][y],res+cnt+f[x][y]); cnt+=a[i]; } return ; } if(e[dep])DFS(dep+1,r); else { int k=g[r].size(); int x=g[r][dep]; for(int j=dep+1;j<k;j++) if(!e[j]){ e[j]=1; e[dep]=1; res+=w[dep][j]; DFS(dep+1,r); res-=w[dep][j]; e[j]=0; e[dep]=0; } DFS(dep+1,r); } } inline void calc(int u){ if(g[u].empty())return ; for(int v:g[u])calc(v); int k=g[u].size(); for(int i=0;i<k;i++) for(int j=i+1;j<k;j++){ int t=0; for(int x:T[g[u][i]]) for(int y:T[g[u][j]]) t=max(t,f[g[u][i]][x]+f[g[u][j]][y]+p[x][y]); // cout<<u<<" "<<g[u][i]<<" "<<g[u][j]<<" "<<f[g[u][i]][g[u][i]]<<" "<<f[g[u][j]][g[u][j]]<<" "<<p[g[u][i]][g[u][j]]<<" "<<t<<endl; w[i][j]=t; w[j][i]=t; } DFS(0,u); for(int x:T[u])bel[x]=u; } signed main(){ ios::sync_with_stdio(0); // freopen("celebration.in","r",stdin); // freopen("celebration.out","w",stdout); cin>>n; for(int i=1;i<n;i++){ int u,v; cin>>u>>v; g[u].push_back(v); g[v].push_back(u); } dfs(1); cin>>q; int s=0; while(q--){ int u,v; cin>>u>>v; if(u==v){ s++; } else p[u][v]=p[v][u]=1; } for(int i=1;i<=n;i++)bel[i]=i; calc(1); cout<<f[1][1]+s<<endl; cout.flush(); return 0; } /* 7 1 2 1 3 1 4 1 5 1 6 1 7 3 2 3 4 5 6 7 5 1 2 2 3 2 4 2 5 2 3 5 1 4 */


测评信息: