求助c++多线程
  • 板块学术版
  • 楼主Deepth
  • 当前回复4
  • 已保存回复4
  • 发布时间2023/9/6 15:57
  • 上次更新2023/11/2 22:34:18
查看原帖
求助c++多线程
788123
Deepth楼主2023/9/6 15:57

如下代码跑样例RE,返回

terminate called without an active exception

求助QAQ

#include<bits/stdc++.h>
#define int long long
#define db double
#define D if(0)
using namespace std;
const int N = 2e5+10,P=1e9+7;
#define out(a) {for(int __=0; __<n;__++)print((a)[__]);cout<<"\n";}
template<typename T>void print(T x){cout<<x<<" ";}
int rd(){
	static int fu,num;static char ch;fu=1,num=0;
	while(!isdigit(ch)){if(ch=='-')fu=-1;ch=getchar();}
	while(isdigit(ch)){num=num*10+ch-'0';ch=getchar();}
	return fu*num;
}
int n;
int cnt=1,h[N];
struct EDGE{
	int v,n;
}e[N*4];
int d[N];
void add(int u,int v){
	d[u]++,d[v]++;
	e[++cnt]={v,h[u]};
	h[u]=cnt;
	e[++cnt]={u,h[v]};
	h[v]=cnt;
}
int dep[N],dfn[N],siz[N],son[N],fa[N];
void dfs(int u,int f){
	fa[u]=f;siz[u]=1;dep[u]=dep[f]+1;
	thread t[d[u]-1];int cnt=0;
	for(int i=h[u];i;i=e[i].n){
		int v=e[i].v;
		if(v==f)continue;
		t[cnt++]=thread(dfs,v,u);
	}
	for(int i=0;i<d[u]-1;i++)if(t[i].joinable())t[i].join();
	for(int i=h[u];i;i=e[i].n)siz[u]+=siz[e[i].v];
}
signed main(){
	//freopen(".in","r",stdin);
	//freopen(".out","w",stdout);
	cin>>n;
	for(int i=2;i<=n;i++)add(rd(),rd());
	dfs(1,0);
	for(int i=1;i<=n;i++)cout<<siz[i]<<" ";
	fclose(stdin);
	fclose(stdout);
}
/*
10
1 3
1 2
3 6
3 9
2 4
4 5
5 10
6 7
6 8
*/
2023/9/6 15:57
加载中...