struct node{
int to,nxt,v;
}edge[100010];
int cnt=0,dp[100010][20],a[100010],n;
----------------------------------------
struct node{
int to,nxt,v;
}edge[50010];
int cnt=0,dp[50010][20],a[50010],n;
两份代码有且仅有此处不同,且前者AC,后者MLE,有大佬能解释一下吗 全部代码如下:
#include<bits/stdc++.h>
using namespace std;
const int maxn=0x3f3f3f3f;
inline int read(){
int s1=1,s2=0;
char ch=getchar();
while(!isdigit(ch)){
if(ch=='-')
s1=-1;
ch=getchar();
}
while(isdigit(ch)){
s2=s2*10+ch-'0';
ch=getchar();
}
return s1*s2;
}
struct node{
int to,nxt,v;
}edge[100010];
int cnt=0,dp[100010][20],a[100010],n;
void add(int x,int y){
cnt++;
edge[cnt].to=y;
edge[cnt].nxt=a[x];
a[x]=cnt;
}
void dfs(int pos,int fa){
for(int i=1;i<=10;++i)
dp[pos][i]=i;
for(int i=a[pos];i;i=edge[i].nxt){
int to=edge[i].to;
if(to==fa)
continue;
dfs(to,pos);
for(int j=1;j<=10;++j){
int minn=maxn;
for(int k=1;k<=10;++k)
if(j!=k)
minn=min(minn,dp[to][k]);
dp[pos][j]+=minn;
}
}
}
int main(){
n=read();
for(int i=1;i<n;++i){
int x=read(),y=read();
add(x,y);
add(y,x);
}
dfs(1,0);
int ans=maxn;
for(int i=1;i<=10;++i)
ans=min(ans,dp[1][i]);
cout<<ans;
return 0;
}