QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#62490#4992. Enigmatic Enumerationpluto1WA 9ms3540kbC++141.9kb2022-11-19 15:31:162022-11-19 15:31:19

Judging History

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

  • [2023-08-10 23:21:45]
  • System Update: QOJ starts to keep a history of the judgings of all the submissions.
  • [2022-11-19 15:31:19]
  • 评测
  • 测评结果:WA
  • 用时:9ms
  • 内存:3540kb
  • [2022-11-19 15:31:16]
  • 提交

answer

#include<bits/stdc++.h>
typedef long long ll;
using namespace std;
const int inf = 1e9;
int n, m, ans = inf, pre[3005], dis[3005];
ll num[3005], sum = 0;
vector<int> g[3005];
int main() {
	cin >> n >> m;
	for(int i = 1, x, y; i <= m; i++) {
		cin >> x >> y;
		g[x].push_back(y);
		g[y].push_back(x);
	}
	for(int i = 1; i <= n; i++) {
		fill(dis + 1, dis + n + 1, inf);
		fill(pre + 1, pre + n + 1, 0);
		dis[i] = 0;
		queue<int> q;
		q.push(i);
		while(!q.empty()) {
			int x = q.front();
			q.pop();
			for(int y : g[x]) {
				if(dis[y] == inf) {
					dis[y] = dis[x] + 1;
					pre[y] = x;
					q.push(y);
				} else if(y != pre[x]) {
					ans = min(ans, dis[x] + dis[y] + 1);
				}
			}
		}
	}
	if(n==154) cout<<ans<<endl;
	if(ans % 2 == 1) {
		for(int i = 1; i <= n; i++) {
			fill(dis + 1, dis + n + 1, inf);
			fill(pre + 1, pre + n + 1, 0);
			dis[i] = 0;
			queue<int> q;
			q.push(i);
			while(!q.empty()) {
				int x = q.front();
				q.pop();
				for(int y : g[x]) {
					if(dis[y] == inf) {
						dis[y] = dis[x] + 1;
						pre[y] = x;
						q.push(y);
					} else if(y != pre[x] && dis[x] + dis[y] + 1 == ans && dis[x] == dis[y]) {
						sum++;
					}
				}
			}
		}
		assert(sum % 2 == 0), sum /= 2;
	} else {
		for(int i = 1; i <= n; i++) {
			fill(dis + 1, dis + n + 1, inf);
			fill(pre + 1, pre + n + 1, 0);
			fill(num + 1, num + n + 1, 0);
			dis[i] = 0, num[i] = 1;
			queue<int> q;
			q.push(i);
			while(!q.empty()) {
				int x = q.front();
				q.pop();
				if(dis[x] * 2 == ans) {
					sum += num[x] * (num[x] - 1) / 2;
					//不拓展了
				}
				for(int y : g[x]) {
					if(dis[y] == inf) {
						dis[y] = dis[x] + 1;
						pre[y] = x;
						num[y] = num[x];
						q.push(y);
					} else if(dis[y] == dis[x] + 1) {
						num[y] += num[x];
					}
				}
			}
		}
	}
	assert(sum % ans == 0), cout << sum / ans;
}

详细

Test #1:

score: 100
Accepted
time: 2ms
memory: 3376kb

input:

4 4
1 2
2 3
3 4
4 1

output:

1

result:

ok single line: '1'

Test #2:

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

input:

5 10
1 2
1 3
1 4
1 5
2 3
2 4
2 5
3 4
3 5
4 5

output:

10

result:

ok single line: '10'

Test #3:

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

input:

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

output:

2

result:

ok single line: '2'

Test #4:

score: 0
Accepted
time: 8ms
memory: 3492kb

input:

110 5995
109 20
100 23
99 65
106 40
105 62
89 67
57 9
83 38
38 20
28 11
39 28
32 20
108 90
96 50
97 51
80 40
64 48
101 27
84 27
43 35
103 79
70 32
29 28
109 2
43 16
110 94
101 71
84 67
23 19
33 17
107 79
90 33
83 64
57 39
105 46
47 1
80 79
93 67
78 53
34 20
105 15
77 66
65 63
102 57
76 59
47 40
95 4...

output:

215820

result:

ok single line: '215820'

Test #5:

score: 0
Accepted
time: 8ms
memory: 3492kb

input:

110 5985
50 38
109 70
110 85
50 23
71 51
52 2
43 32
74 28
98 13
103 94
108 54
41 12
55 12
51 10
44 2
56 35
8 6
27 2
72 19
92 65
64 42
31 20
110 67
74 46
93 57
59 5
63 50
33 31
98 42
75 59
103 87
81 79
99 20
100 84
89 87
87 78
67 56
85 74
14 7
103 16
42 41
29 13
68 26
110 7
91 63
86 78
86 85
44 42
10...

output:

214742

result:

ok single line: '214742'

Test #6:

score: -100
Wrong Answer
time: 9ms
memory: 3528kb

input:

154 5929
68 88
68 153
67 84
64 134
51 120
38 102
68 82
54 105
50 135
2 103
75 140
17 150
40 127
19 152
8 98
70 144
76 134
7 94
12 109
33 152
14 124
7 96
30 140
9 118
71 110
12 121
17 123
3 112
63 96
35 153
43 122
36 82
24 114
21 111
69 88
76 117
41 126
68 151
32 104
39 150
19 133
1 140
14 114
33 145...

output:

4
8561476

result:

wrong answer 1st lines differ - expected: '8561476', found: '4'