在完成P2170时,本人提交了下面这个代码:
#include<bits/stdc++.h>
using namespace std;
int n,m,k,tpa,tpb,tot = 1;
int father[20010],p[20010],v[20010],dp[40010];
int getfather(int x){
if(father[x] == x){
return x;
}
father[x] = getfather(father[x]);
return father[x];
}
void marge(int a,int b){
a = getfather(a);
b = getfather(b);
if(a == b){
return;
}
father[b] = a;
p[a] += p[b];
}
int main(){
scanf("%d%d%d",&n,&m,&k);
for(int i = 1; i <= n+5; i++){
father[i] = i;
p[i] = 1;
}
for(int i = 1; i <= k; i++){
scanf("%d%d",&tpa,&tpb);
marge(tpa,tpb);
}
for(int i = 1; i <= n; i++){
if(father[i] == i){
v[tot] = p[i];
tot++;
}
}
for(int i = 1; i <= tot; i++){
for(int j = 2*m; j >= v[i]; j--){
dp[j] = max(dp[j],dp[j-v[i]]+v[i]);
}
}
int Min = 1000000005,ans;
for(int i = 1; i <= 2*m; i++){
if(Min > abs(dp[i]-m)){
Min = abs(dp[i]-m);
ans = dp[i];
}
}
printf("%d",ans);
return 0;
}
发现 #8 WA,于是下载数据。
本地运行正常输出0,于是我在在线 IDE 上运行。
将代码和数据都拷贝到 IDE 后,运行发现,每一次运行结果都不一样。 没有开 O2,语言 C++11,输出在 3000~5000 左右。请问这是什么原因?求解。