数组开小MLE,数组开大AC
查看原帖
数组开小MLE,数组开大AC
175801
黑虎阿福楼主2022/7/20 20:20
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;
}
2022/7/20 20:20
加载中...