社区讨论
求助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 条回复,欢迎继续交流。
正在加载回复...