UOJ Logo

NOI.AC

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#214590#2681. How Many Paths?jsxheng35853ms19344kbC++112.2kb2024-11-20 19:22:242024-11-20 23:02:24

answer

#include<bits/stdc++.h>
#define int long long
using namespace std;
namespace IO{
	template<typename T> inline void read(T &x){
		bool f=1;x=0;char ch=getchar();
		while(ch<'0'||ch>'9'){if(ch=='-')f=0;ch=getchar();}
		while(ch>='0'&&ch<='9')x=(x<<1)+(x<<3)+(ch&15),ch=getchar();
		x=f?x:-x;
	}
	template<typename T> inline void write(T x){
		if(x<0) putchar('-'),x=-x;
	   	if(x>9) write(x/10);
	   	putchar(('0'+x%10));
	}
	template <typename T,typename ...Args> inline void read(T &x,Args &...args){read(x);read(args...);}
	template<typename T> inline void write(T x,char c){write(x),putchar(c);}
}
using namespace IO;
int n,m,head[100005],tot,tim,tot2,head2[100005];
struct Edge{
	int to,next;
}edge[500005],ed[500005];
void add(int u,int v){
	edge[++tot]={v,head[u]},head[u]=tot;
}
void add2(int u,int v){
	ed[++tot2]={v,head2[u]},head2[u]=tot2;
}
int dfn[100005],low[100005],id[100005],scc_cnt;
int stk[100005],siz[100005],top,ans[100005],vis[100005];
bool in_stk[100005];
void tarjan(int u){
	dfn[u]=low[u]=++tim;
	stk[++top]=u;
	in_stk[u]=true;
	for(int i=head[u];i;i=edge[i].next){
		int v=edge[i].to;
		if(!dfn[v]){
			tarjan(v);
			low[u]=min(low[u],low[v]);
		}
		else if(in_stk[v])low[u]=min(low[u],low[v]);
	}
	if(dfn[u]==low[u]){
		int v;scc_cnt++;
		do{
			v=stk[top--];
			in_stk[v]=false;
			id[v]=scc_cnt;
			siz[scc_cnt]++;
		}while(u!=v);
	}
}
void dfs(int u,bool inf){
	vis[u]++;
	for(int i=head2[u];i;i=ed[i].next){
		int v=ed[i].to;
		if(siz[v]>1||inf)ans[v]=3,dfs(v,true);
		else dfs(v,false);
	}
}
signed main(){
	read(n,m);
	for(int i=1,u,v;i<=m;++i){
		read(u,v);
		add(u,v);
	}
	for(int i=1;i<=n;++i)if(!dfn[i])tarjan(i);
//	for(int i=1;i<=n;++i)cout<<id[i]<<" ";
//	cout<<"\n";
	for(int u=1;u<=n;++u){
		for(int i=head[u];i;i=edge[i].next){
			int v=edge[i].to;
			if(id[u]!=id[v])add2(id[u],id[v]);
		}
	}
	if(siz[id[1]]==1)ans[id[1]]=1;
	else ans[id[1]]=3;
	dfs(id[1],(ans[id[1]]==3));
//	for(int i=1;i<=scc_cnt;++i)cout<<vis[i]<<" "<<ans[i]<<"\n";
	for(int i=1;i<=n;++i){
		if(ans[id[i]]==3)write(3,' ');
		else if(vis[id[i]]>1)write(2,' ');
		else if(vis[id[i]]==1)write(1,' ');
		else write(0,' ');
	}
	return 0;
}

Details

小提示:点击横条可展开更详细的信息

Test #1:

score: 0
Time Limit Exceeded

input:

50000 500000
27433 23782
1927 1159
20346 8794
27393 18828
40557 32372
29462 34217
31695 6752
2253 19...

output:


result:


Test #2:

score: 5
Accepted
time: 94ms
memory: 19184kb

input:

50000 500000
30894 37863
18739 43205
26461 20214
15741 957
38985 43365
15978 10327
7414 35300
17146 ...

output:

1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ...

result:

ok single line: '1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ... 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 '

Test #3:

score: 5
Accepted
time: 185ms
memory: 19332kb

input:

50000 500000
38020 5057
495 7556
33072 22521
28583 41495
7199 42249
37197 26482
34166 16408
33429 19...

output:

1 0 2 0 0 2 0 0 0 2 2 2 2 0 0 0 0 2 2 2 0 2 2 0 0 2 0 0 0 0 0 0 0 0 2 0 0 0 0 2 0 0 0 2 0 2 2 0 1 0 ...

result:

ok single line: '1 0 2 0 0 2 0 0 0 2 2 2 2 0 0 ... 0 0 2 1 0 0 0 0 0 0 2 0 2 1 0 '

Test #4:

score: 0
Time Limit Exceeded

input:

50000 500000
9177 925
34439 28325
7099 9560
21204 48849
36028 23762
6297 46964
38036 31855
6292 1832...

output:


result:


Test #5:

score: 5
Accepted
time: 103ms
memory: 19256kb

input:

50000 500000
30632 1595
20715 35227
44119 45259
47444 36877
6942 14652
2864 18557
42367 19431
38615 ...

output:

1 2 0 0 0 0 0 2 0 0 0 0 0 0 2 2 2 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 2 0 0 0 0 0 0 0 0 ...

result:

ok single line: '1 2 0 0 0 0 0 2 0 0 0 0 0 0 2 ... 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 '

Test #6:

score: 5
Accepted
time: 96ms
memory: 19224kb

input:

50000 500000
33040 23079
35743 21197
49128 38373
36656 46198
17910 29433
45170 24921
28618 34080
100...

output:

1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 1 0 1 2 2 0 0 0 0 0 0 0 0 0 2 0 0 0 1 0 0 0 0 0 0 2 ...

result:

ok single line: '1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ... 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 '

Test #7:

score: 5
Accepted
time: 78ms
memory: 19180kb

input:

50000 500000
5226 27470
49597 10290
40326 34407
17000 37084
26244 45989
48273 4706
15981 19231
26219...

output:

1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ...

result:

ok single line: '1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ... 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 '

Test #8:

score: 5
Accepted
time: 213ms
memory: 19344kb

input:

50000 500000
16952 41617
2923 24354
4446 41320
8355 41065
23930 48553
5990 23289
30279 14635
16174 1...

output:

1 0 2 2 2 2 0 0 0 2 1 0 0 2 0 0 0 0 0 2 2 0 2 0 1 0 0 2 0 1 2 0 2 0 2 0 2 2 0 0 0 2 2 2 2 0 0 0 2 2 ...

result:

ok single line: '1 0 2 2 2 2 0 0 0 2 1 0 0 2 0 ... 0 0 2 2 2 0 0 1 2 1 0 2 0 2 0 '

Test #9:

score: 0
Time Limit Exceeded

input:

50000 500000
40140 17583
24758 1389
12331 1829
43385 23986
38136 28093
21088 33706
44519 38558
39908...

output:


result:


Test #10:

score: 5
Accepted
time: 84ms
memory: 19180kb

input:

50000 500000
26128 23615
14751 3541
9682 26585
39984 12641
32407 34611
40404 13491
49939 11363
19404...

output:

1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ...

result:

ok single line: '1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ... 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 '

Test #11:

score: 0
Time Limit Exceeded

input:

100000 500000
1 2
1 3
1 8
1 10
1 11
1 17
1 48
1 100
1 284
1 3021
1 7857
1 16097
1 18352
1 17333
1 81...

output:


result:


Test #12:

score: 0
Time Limit Exceeded

input:

100000 500000
1 2
1 4
1 5
1 7
1 8
1 13
1 15
1 587
1 6125
1 8728
1 1965
1 12132
1 8992
1 17819
1 1358...

output:


result:


Test #13:

score: 0
Time Limit Exceeded

input:

100000 500000
1 2
1 6
1 45
1 68
1 79
1 496
1 546
1 1119
1 1510
1 1665
1 3262
1 4727
1 4879
1 5430
1 ...

output:


result:


Test #14:

score: 0
Time Limit Exceeded

input:

100000 500000
1 2
1 4
1 8
1 16
1 28
1 58
1 85
1 96
1 106
1 241
1 3315
1 3551
1 13
1 1969
1 12587
1 1...

output:


result:


Test #15:

score: 0
Time Limit Exceeded

input:

100000 500000
1 2
1 7
1 13
1 15
1 18
1 74
1 277
1 652
1 1116
1 8926
1 9947
1 12793
1 17696
1 1742
1 ...

output:


result:


Test #16:

score: 0
Time Limit Exceeded

input:

100000 500000
1 2
1 4
1 5
1 7
1 8
1 21
1 26
1 29
1 31
1 254
1 385
1 451
1 678
1 1278
1 2323
1 3775
1...

output:


result:


Test #17:

score: 0
Time Limit Exceeded

input:

100000 500000
1 2
1 15
1 44
1 60
1 183
1 365
1 582
1 1768
1 1793
1 6193
1 9585
1 12293
1 447
1 9529
...

output:


result:


Test #18:

score: 0
Time Limit Exceeded

input:

100000 500000
1 2
1 3
1 4
1 65
1 103
1 282
1 3710
1 5403
1 7559
1 4446
1 5382
1 5028
1 18244
1 5690
...

output:


result:


Test #19:

score: 0
Time Limit Exceeded

input:

100000 500000
1 2
1 6
1 310
1 510
1 643
1 667
1 4289
1 13736
1 15465
1 7212
1 8416
1 8424
1 11633
1 ...

output:


result:


Test #20:

score: 0
Time Limit Exceeded

input:

100000 500000
1 2
1 4
1 6
1 7
1 10
1 16
1 247
1 433
1 540
1 2050
1 2671
1 13116
1 9660
1 18620
1 107...

output:


result: