RT,而且这个错误不止一次出现了。
这是我桌面上的对拍文件。
#include <bits/stdc++.h>
using namespace std;
random_device gen;
mt19937 rd(gen());
const int n=6,d=2;
int a[n+1];
int f[n+1];
int find(int x){return f[x]==x?x:find(f[x]);}
void get(int len){
shuffle(a+1,a+1+n,rd);
printf("%d ",len);
for(int i=1;i<=len;++i){
printf("%d ",a[i]);
}
puts("");
}
int main(){
printf("%d %d\n",n,d);
int u,v,x,y;
for(int i=1;i<n+1;i++)f[i]=i,a[i]=i;
for(int i=1;i<n;){
u=rd()%n+1;
v=rd()%n+1;
x=find(u);y=find(v);
if(x==y)continue;
printf("%d %d\n",u,v);
f[x]=y;
i++;
}
int m1=rd()%n+1,m2=rd()%n+1;
get(m1),get(m2);
return 0;
}
#include<bits/stdc++.h>
using namespace std;
const int N=200010,M=2*N;
int n,d,a[N],b[N],h[N],e[M],ne[M],idx,m1,m2,ans;
bool v1[N],v2[N];
void add(int a,int b){
e[idx]=b,ne[idx]=h[a],h[a]=idx++;
}
void dfs(int u,bool v[],int fa){
for(int i=h[u];~i;i=ne[i]){
int j=e[i];
if(j==fa)continue;
dfs(j,v,u);
if(v[j])v[u]=1;
}
if(v[u]&&u!=1)ans+=2;
}
void dfs2(int u,int fa,int dep){
if(!v1[u]&&!v2[u])return;
if(dep>d)ans+=2;
for(int i=h[u];~i;i=ne[i]){
int j=e[i];
if(j==fa)continue;
if(!(v1[j]&&v2[j]))dfs2(j,u,dep+1);
else dfs2(j,u,0);
}
}
int main(){
puts("hello world");
return 0;
memset(h,-1,sizeof h);
scanf("%d%d",&n,&d);
for(int i=1;i<n;++i){
int a,b;
scanf("%d%d",&a,&b);
add(a,b),add(b,a);
}
scanf("%d",&m1);
for(int i=1;i<=m1;++i)scanf("%d",a+i),v1[a[i]]=1;
scanf("%d",&m2);
for(int i=1;i<=m2;++i)scanf("%d",b+i),v2[b[i]]=1;
dfs(1,v1,0);
dfs(1,v2,0);
dfs2(1,0,0);
printf("%d",ans);
return 0;
}
#include <bits/stdc++.h>
int n, D, m1, m2, k1[200005], k2[200005];
int d1[200005], d2[200005], d[200005];
int ans ;
std::vector <int> ver[200005];
void dfs(int x, int f){
if(k1[x] == 1) d1[x] = d[x];
if(k2[x] == 1) d2[x] = d[x];
for(int i = 0; i < ver[x].size(); ++i){
int y = ver[x][i];
if(y == f) continue;
d[y] = d[x] + 1;
dfs(y, x);
d1[x] = std::max(d1[x], d1[y]);
d2[x] = std::max(d2[x], d2[y]);
}
if(x == 1) return ;
if(!d1[x] && d2[x] - d[x] <= D - 1) ans -= 2;
if(!d2[x] && d1[x] - d[x] <= D - 1) ans -= 2;
return ;
}
void solve(){
scanf("%d%d", &n, &D);
ans = 4 * (n - 1);
for(int i = 1; i <= n - 1; ++i){
int x, y;
scanf("%d%d", &x, &y);
ver[x].push_back(y);
ver[y].push_back(x);
}
scanf("%d", &m1);
for(int i = 1; i <= m1; ++i){
int x;
scanf("%d", &x);
k1[x] = 1;
}
scanf("%d", &m2);
for(int i = 1; i <= m2; ++i){
int x;
scanf("%d", &x);
k2[x] = 1;
}
d[1] = 1;
dfs(1, 0);
printf("%d\n", ans);
//for(int i = 1; i <= n; ++i) printf("%d %d\n", d1[i], d2[i]);
return ;
}
signed main(){
int T = 1;
while(T--) solve();
return 0;
}
:loop
@echo off
gen.exe > gen.in
my.exe < gen.in > my.out
std.exe < gen.in > std.out
fc std.out my.out
if not errorlevel 1 goto loop
pause
:loop
@echo off
gen.exe > in.txt
my.exe < in.txt > myout.txt
std.exe < in.txt > stdout.txt
fc myout.txt stdout.txt
if not errorlevel 1 goto loop
pause
奇怪的是,无论运行 fc.bat 还是 fc2.bat,都停不下来,很明显这两个程序无论如何都会得到不同的输出,这是什么原因?谢谢大佬。