QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#540982#8943. Challenge Matrix Multiplicationucup-team3510#RE 3ms9956kbC++201.2kb2024-08-31 18:16:292024-08-31 18:16:30

Judging History

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

  • [2024-08-31 18:16:30]
  • 评测
  • 测评结果:RE
  • 用时:3ms
  • 内存:9956kb
  • [2024-08-31 18:16:29]
  • 提交

answer

#include <bits/stdc++.h>
#define N 1000011
using namespace std;
int n,m;
vector<int> G[N];
queue<int> q;int in[N],ord[N],clk,cur[N],col[N],k;
vector<vector<int> > v;
void dfs(int u,int c)
{//printf("dfs(%d,%d)\n",u,c);
	col[u]=c;v[c].push_back(u);
	if(cur[u]==G[u].size())return;
	dfs(G[u][cur[u]++],c);
}
int dep[N],suf[N],to[N],ans[N];
int main()
{
	scanf("%d%d",&n,&m);
	for(int i=1;i<=m;++i)
	{
		int u,v;scanf("%d%d",&u,&v);G[u].push_back(v);++in[v];
	}
	for(int i=1;i<=n;++i)
	{
		for(int _=0;_<(int)G[i].size()-in[i];++_)
		{
			v.push_back(vector<int>());
			dfs(i,k++);
		}
	}
	for(int i=1;i<=n;++i)if(!in[i])q.push(i);
	while(!q.empty())
	{
		int p=q.front();q.pop();
		ord[++clk]=p;
		for(int v:G[p])if(!--in[v])q.push(v);
	}
	for(int i=0;i<k;++i)
	{
		// printf("chain %d:",i);for(int x:v[i])printf("%d ",x);putchar(10);
		for(int i=1;i<=n;++i)dep[i]=v[i].size();
		for(int j=0;j<v[i].size();++j)dep[v[i][j]]=j;
		for(int j=v[i].size()-1;~j;--j)suf[j]=suf[j+1]+(col[v[i][j]]==i);
		for(int _=n;~_;--_)
		{
			int u=ord[_];
			for(int v:G[u])dep[u]=min(dep[u],dep[v]);
		}
		for(int i=1;i<=n;++i)ans[i]+=suf[dep[i]];
	}
	for(int i=1;i<=n;++i)printf("%d ",ans[i]);putchar(10);
	fclose(stdin);fclose(stdout);return 0;
}

详细

Test #1:

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

input:

4 6
1 3
2 3
2 4
1 2
1 3
1 3

output:

4 3 1 1 

result:

ok 4 number(s): "4 3 1 1"

Test #2:

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

input:

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

output:

4 3 2 1 1 

result:

ok 5 number(s): "4 3 2 1 1"

Test #3:

score: -100
Runtime Error

input:

100 900
89 90
34 35
45 46
97 98
41 42
59 61
19 20
25 29
2 3
28 29
54 55
77 78
69 74
60 61
43 44
13 14
92 93
65 66
68 69
72 73
78 81
54 56
55 60
14 15
9 10
92 93
10 11
18 19
16 17
97 98
76 77
39 40
71 72
7 8
63 64
7 8
16 24
13 24
83 84
90 91
1 4
4 5
96 97
81 82
91 92
80 81
66 67
19 20
3 4
9 10
47 48
...

output:


result: