社区讨论
关于MLE的问题
P2986[USACO10MAR] Great Cow Gathering G参与者 2已保存回复 2
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 2 条
- 当前快照
- 1 份
- 快照标识符
- @m1qdlhuq
- 此快照首次捕获于
- 2024/10/01 19:49 去年
- 此快照最后确认于
- 2025/11/04 18:22 4 个月前
为什么数组开小了MLE,数组开大了就不会?
MLE code:
CPP#include<bits/stdc++.h>
#define ll long long
using namespace std;
int n;
ll a[10005],siz[10005];
struct edge{
int v,w;
};
vector<edge> e[10005];
ll f[10005];
ll ans=LLONG_MAX;
void dfs(int u,int fa)
{
siz[u]=a[u];
for(int i=0;i<e[u].size();i++)
{
int v=e[u][i].v;
if(v==fa) continue;
dfs(v,u);
siz[u]+=siz[v];
f[u]+=siz[v]*e[u][i].w+f[v];
}
}
void dfs2(int u,int fa)
{
ans=min(ans,f[u]);
for(int i=0;i<e[u].size();i++)
{
int v=e[u][i].v;
if(v==fa)
continue;
f[v]=f[u]-siz[v]*e[u][i].w+(siz[1]-siz[v])*e[u][i].w;
dfs2(v,u);
}
}
int main(){
scanf("%d",&n);
for(int i=1;i<=n;i++)
scanf("%lld",&a[i]);
for(int i=1;i<n;i++)
{
int u,v,w;
scanf("%d%d%d",&u,&v,&w);
e[u].push_back((edge){v,w});
e[v].push_back((edge){u,w});
}
dfs(1,0);
dfs2(1,0);
printf("%lld",ans);
return 0;
}
AC code:
```cpp
#include<bits/stdc++.h>
#define ll long long
using namespace std;
int n;
ll a[100005],siz[100005];
struct edge{
int v,w;
};
vector<edge> e[100005];
ll f[100005];
ll ans=LLONG_MAX;
void dfs(int u,int fa)
{
siz[u]=a[u];
for(int i=0;i<e[u].size();i++)
{
int v=e[u][i].v;
if(v==fa) continue;
dfs(v,u);
siz[u]+=siz[v];
f[u]+=siz[v]*e[u][i].w+f[v];
}
}
void dfs2(int u,int fa)
{
ans=min(ans,f[u]);
for(int i=0;i<e[u].size();i++)
{
int v=e[u][i].v;
if(v==fa)
continue;
f[v]=f[u]-siz[v]*e[u][i].w+(siz[1]-siz[v])*e[u][i].w;
dfs2(v,u);
}
}
int main(){
scanf("%d",&n);
for(int i=1;i<=n;i++)
scanf("%lld",&a[i]);
for(int i=1;i<n;i++)
{
int u,v,w;
scanf("%d%d%d",&u,&v,&w);
e[u].push_back((edge){v,w});
e[v].push_back((edge){u,w});
}
dfs(1,0);
dfs2(1,0);
printf("%lld",ans);
return 0;
}
回复
共 2 条回复,欢迎继续交流。
正在加载回复...