题目链接http://acm.hdu.edu.cn/showproblem.php?pid=3562
题意
一开始有三个节点两两相连。
然后新加一个节点与已存在的两个节点a,b相连。其中a和b本身已经相连。
问最后形成的图的简单环最大是多少。
题解
d
p
[
i
]
[
j
]
dp[i][j]
dp[i][j]表示
i
i
i和
j
j
j之间最多有多少个点。
然后就是要反过来更新这个
d
p
dp
dp数组。嗯,这是关键。
#include<bits/stdc++.h>
#include<math.h>
using namespace std;
const int N=1e3+7;
int dp[N][N];
int aa[N],bb[N];
int main(){
int n;
while(scanf("%d",&n)!=EOF){
memset(dp,0,sizeof(dp));
int ans=0;
for(int i=4;i<=n;i++){
scanf("%d%d",&aa[i],&bb[i]);
}
for(int i=n,a,b;i>=4;i--){
a=aa[i],b=bb[i];
ans=max(ans,dp[a][i]+dp[i][b]+dp[a][b]+3);
dp[a][b]=dp[b][a]=max(dp[a][b],dp[a][i]+dp[i][b]+1);
}
ans=max(ans,dp[1][2]+dp[2][3]+dp[1][3]+3);
printf("%d\n",ans);
}
}