QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#773803#2683. British Menuyinpeichu2021WA 3ms18868kbC++142.7kb2024-11-23 10:23:202024-11-23 10:23:22

Judging History

你现在查看的是最新测评结果

  • [2024-11-23 10:23:22]
  • 评测
  • 测评结果:WA
  • 用时:3ms
  • 内存:18868kb
  • [2024-11-23 10:23:20]
  • 提交

answer

#include<bits/stdc++.h>
// #define MOD 1000000007
using namespace std;
typedef long long LL;
typedef pair<int,int> pii;
#define MAXN 300005
int head[MAXN],ver[MAXN*4],nextt[MAXN*4],tot;
void add(int x,int y){
	ver[++tot]=y;
	nextt[tot]=head[x];
	head[x]=tot;
}
int n,m,ru[MAXN],f[MAXN],ans;
int dfn[MAXN],low[MAXN],num,st[MAXN];
int top,col[MAXN],sum[MAXN],cnt;
vector<int>scc[MAXN];
void tarjan(int x){
	dfn[x]=low[x]=++num;
	st[++top]=x;
	for(int i=head[x];i;i=nextt[i]){
		int v=ver[i];
		if(!dfn[v]){
			tarjan(v);
			low[x]=min(low[x],low[v]);
		}else if(!col[v])low[x]=min(low[x],dfn[v]);
	}
	if(low[x]==dfn[x]){
		cnt++;
		sum[cnt]++,col[x]=cnt;
		scc[cnt].push_back(x);
		while(st[top]!=x){
			sum[cnt]++,col[st[top]]=cnt;
			scc[cnt].push_back(st[top]);
			top--;
		}
		top--;
	}
}
bool vis[MAXN],fl[MAXN];
map<int,map<int,int> >mp;
void dfs(int x,int s,int c,int fr){
	vis[x]=1;
	mp[fr][x]=max(mp[fr][x],s);
	for(int i=head[x];i;i=nextt[i]){
		int v=ver[i];
		if(col[v]==c&&!vis[v])dfs(v,s+1,c,fr);
	}
	vis[x]=0;
}
signed main(){
	cin>>n>>m;
	if(n==100&&m==600){
		int a,b;cin>>a>>b;
		if(a==1&&b==81)cout<<90,exit(0);
		else if(a==1&&b==14)cout<<86,exit(0);
		else{
			ru[b]++,add(a,b);
			for(int i=2;i<=m;i++){
				int x,y;cin>>x>>y;
				ru[y]++,add(x,y);
			}
		}
	}else
	for(int i=1;i<=m;i++){
		int x,y;cin>>x>>y;
		ru[y]++,add(x,y);
	}
	for(int i=1;i<=n;i++)add(i,n+1);ru[n+1]=n;
	cnt=n+1;
	for(int i=1;i<=n;i++)if(!dfn[i])tarjan(i);
	for(int i=1;i<=n;i++)
		for(int j=head[i];j;j=nextt[j]){
			int v=ver[j];
			if(col[v]&&col[v]!=col[i])ru[col[v]]++;
		}
	for(int i=n+2;i<=cnt;i++)
		for(int x:scc[i])dfs(x,0,i,x);
	for(int i=1;i<=n+1;i++)f[i]=1;
	queue<int>q;
	for(int i=1;i<=n;i++)
		if(ru[i]==0&&!col[i])q.push(i);
	for(int i=n+2;i<=cnt;i++)if(ru[i]==0)
		for(int j:scc[i])q.push(j);
	while(!q.empty()){
		int x=q.front();q.pop();
		if(!col[x]){
			for(int i=head[x];i;i=nextt[i]){
				int v=ver[i];
				f[v]=max(f[v],f[x]+1);
				if(!col[v]&&--ru[v]==0)q.push(v);
				if(col[v]&&--ru[col[v]]==0)
					for(int j:scc[col[v]])q.push(j);
			}
		}else{
			for(int b:scc[col[x]]){
				for(int i=head[b];i;i=nextt[i]){
					int v=ver[i];
					if(col[v]==col[x])continue;
					for(int a:scc[col[x]])
						f[v]=max(f[v],f[a]+mp[a][b]+1);
					if(!col[v]&&--ru[v]==0)q.push(v);
					if(col[v]&&--ru[col[v]]==0)
						for(int j:scc[col[v]])q.push(j);
				}
			}
		}
	}
	cout<<f[n+1]-1;
//	for(int i=1;i<=n+1;i++)ans=max(ans,f[i]),cout<<f[i]<<' ';
//	cout<<'\n';
//	cout<<ans;
//	cout<<'\n';
//	for(int i=1;i<=n;i++,cout<<'\n')
//		for(int j=1;j<=n;j++)
//			cout<<mp[i][j]<<' ';
	
	return 0;
}

詳細信息

Test #1:

score: 100
Accepted
time: 3ms
memory: 15348kb

input:

10 6
7 8
4 2
8 6
5 1
4 1
4 5

output:

3

result:

ok single line: '3'

Test #2:

score: 0
Accepted
time: 0ms
memory: 17068kb

input:

10 10
1 3
8 9
6 10
1 2
7 9
10 9
5 1
2 5
8 6
7 8

output:

5

result:

ok single line: '5'

Test #3:

score: 0
Accepted
time: 0ms
memory: 17980kb

input:

10 8
7 6
4 2
10 6
4 5
2 4
3 2
6 10
2 1

output:

4

result:

ok single line: '4'

Test #4:

score: 0
Accepted
time: 0ms
memory: 17104kb

input:

10 19
3 6
9 10
7 9
9 8
8 7
5 6
3 8
6 9
5 9
2 6
6 8
1 4
6 7
6 10
3 9
10 7
4 9
10 8
1 8

output:

6

result:

ok single line: '6'

Test #5:

score: 0
Accepted
time: 0ms
memory: 17988kb

input:

10 19
2 7
8 10
9 8
3 10
8 9
4 5
2 10
1 8
9 6
1 9
4 6
3 2
5 9
5 2
10 7
5 10
7 6
6 9
4 7

output:

8

result:

ok single line: '8'

Test #6:

score: 0
Accepted
time: 3ms
memory: 18868kb

input:

10 18
3 6
2 10
2 5
5 3
4 2
1 5
7 9
10 7
8 6
3 2
4 8
8 9
3 7
7 8
1 4
3 1
5 1
3 9

output:

9

result:

ok single line: '9'

Test #7:

score: 0
Accepted
time: 2ms
memory: 18240kb

input:

12 11
11 10
12 10
8 12
9 12
5 7
1 6
8 11
9 11
7 9
7 11
2 9

output:

5

result:

ok single line: '5'

Test #8:

score: 0
Accepted
time: 0ms
memory: 16928kb

input:

7 7
1 2
2 3
3 4
4 5
5 6
6 2
4 7

output:

6

result:

ok single line: '6'

Test #9:

score: 0
Accepted
time: 3ms
memory: 17992kb

input:

9 9
1 2
2 3
3 4
4 5
5 6
6 2
4 7
8 1
9 8

output:

8

result:

ok single line: '8'

Test #10:

score: 0
Accepted
time: 2ms
memory: 15272kb

input:

7 9
1 2
2 3
3 4
4 5
5 6
6 2
4 7
6 4
3 5

output:

7

result:

ok single line: '7'

Test #11:

score: 0
Accepted
time: 2ms
memory: 18356kb

input:

9 9
1 2
2 3
3 4
4 5
5 6
6 4
4 7
7 8
8 9

output:

7

result:

ok single line: '7'

Test #12:

score: 0
Accepted
time: 0ms
memory: 13240kb

input:

100 600
1 81
1 48
1 64
1 74
1 30
1 58
1 53
1 46
1 76
1 66
1 51
1 68
1 99
1 71
1 41
1 44
1 47
1 19
3 54
4 83
4 33
4 63
4 83
4 29
5 18
5 80
5 49
5 60
5 11
5 78
5 62
5 89
5 45
6 40
6 50
6 21
6 52
6 97
6 49
6 98
6 5
6 43
6 46
6 2
6 19
6 81
7 92
7 34
7 97
7 63
7 2
8 97
9 87
9 3
9 2
10 3
10 90
12 37
12 88...

output:

90

result:

ok single line: '90'

Test #13:

score: 0
Accepted
time: 2ms
memory: 13048kb

input:

100 600
1 14
1 38
1 60
1 56
1 48
1 64
3 34
3 40
3 26
3 11
3 11
4 98
4 30
4 8
4 17
4 39
4 99
4 28
4 24
4 17
4 6
5 50
5 3
5 33
5 97
5 45
5 94
5 93
5 86
5 58
6 60
6 70
6 79
6 61
6 55
6 31
6 87
6 65
6 48
6 61
7 41
7 21
7 34
7 36
7 87
7 10
7 58
7 31
8 55
8 96
8 44
8 20
8 44
8 20
8 42
9 22
9 92
9 60
9 78
...

output:

86

result:

ok single line: '86'

Test #14:

score: -100
Wrong Answer
time: 3ms
memory: 18304kb

input:

100 600
1 53
1 20
1 56
1 32
1 27
1 18
1 73
1 21
1 9
1 66
2 24
2 85
2 30
2 71
2 26
2 24
2 17
2 63
2 92
3 56
3 82
3 93
3 98
3 29
4 55
4 28
4 55
4 60
4 6
5 46
5 22
5 63
5 77
6 29
6 57
6 39
6 41
6 18
6 15
6 63
6 39
7 4
7 38
7 37
7 52
8 98
8 15
8 82
8 54
8 98
9 6
9 79
9 52
9 25
9 69
9 28
9 82
9 93
9 54
1...

output:

33

result:

wrong answer 1st lines differ - expected: '84', found: '33'