社区讨论

求助c++多线程

学术版参与者 3已保存回复 4

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
4 条
当前快照
1 份
快照标识符
@lo1in6v3
此快照首次捕获于
2023/10/22 21:40
2 年前
此快照最后确认于
2023/11/02 22:34
2 年前
查看原帖
如下代码跑样例RE,返回
terminate called without an active exception
求助QAQ
CPP
#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
*/

回复

4 条回复,欢迎继续交流。

正在加载回复...