QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#110992#4218. Hidden GraphRetrieve_72ML 17ms5116kbC++143.5kb2023-06-05 10:40:212023-06-05 10:40:23

Judging History

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

  • [2023-08-10 23:21:45]
  • System Update: QOJ starts to keep a history of the judgings of all the submissions.
  • [2023-06-05 10:40:23]
  • 评测
  • 测评结果:ML
  • 用时:17ms
  • 内存:5116kb
  • [2023-06-05 10:40:21]
  • 提交

answer

#include <bits/stdc++.h>
using namespace std;
#define pb push_back
#define pii pair<int, int>
#define mp make_pair
#define fi first
#define se second 
#define deb(var) cerr << #var << '=' << var << "; "
#define int long long
namespace SUB {
	int n, tot;
	set<int> sub[2010], tmp; vector<pii> g;
	int main() {
		srand(time(0));
		tot = 1; sub[1].insert(1);
		for (int i = 2; i <= n; i++) {
			int ok = 0;
			for (int j = 1; j <= tot; j++) {
				cout << "? " << sub[j].size() + 1 << " " << i << " ";
				tmp = sub[j];
				for (set<int>::iterator it = tmp.begin(); it != tmp.end(); it++) cout << *it << " "; cout << endl;
				int u, v;
				cin >> u >> v;
				if (u != i) swap(u, v);
				if (u == -1 && v == -1) {
					if (!ok) ok = j;
					else if (rand() % 2) ok = j;
				}
				else {
					g.pb(mp(u, v));
					while (true) {
						tmp.erase(v);
						if (tmp.empty()) break;
						cout << "? " << tmp.size() + 1 << " " << i << " ";
						for (set<int>::iterator it = tmp.begin(); it != tmp.end(); it++) cout << *it << " "; cout << endl;
						cin >> u >> v;
						if (u != i) swap(u, v); 
						if (v != -1) {
							g.pb(mp(u, v));
						} else break;
					}
				}
			}
			if (ok) sub[ok].insert(i); else sub[++tot].insert(i);
		}
		cout << "! " << g.size() << endl;
		for (int i = 0; i < g.size(); i++) cout << g[i].fi << " " << g[i].se << endl;
		return 0;
	}
} 
int n, m, tot, ind[20010], lnd[20010], col[20010];
set<int> sub[20010], tmp; vector<int> g[20010]; vector<int> c; 
	set<pii> st; 
void getsub(int n) {
	st.clear();
	for (int i = 1; i <= n; i++)
		st.insert(mp(ind[i], i));
	memcpy(lnd, ind, sizeof lnd);
	memset(col, 0, sizeof col); tot = 0;
	while (st.size()) {
		set<pii>::iterator it = st.begin(); 
		int u = (*it).se; ind[u] = 0; st.erase(it);
		c.clear();
		for (int j = 0; j < g[u].size(); j++) {
			if (col[g[u][j]]) c.pb(col[g[u][j]]);
			if (ind[g[u][j]]) {
				st.erase(mp(ind[g[u][j]], g[u][j])); ind[g[u][j]]--; st.insert(mp(ind[g[u][j]], g[u][j]));
			}
		}
		sort(c.begin(), c.end());
		int lst = 0, now = 0;
		for (int i = 0; i < c.size(); i++)
			if (c[i] > lst + 1) {
				now = lst + 1; break;
			} else lst = c[i];
		col[u] = now;
		if (!now) col[u] = ++tot;
	}
	memcpy(ind, lnd, sizeof lnd);
}
signed main() {
	cin >> n;
	if (n <= 100) {
		SUB::n = n;
		return SUB::main();
	}
	tot = 1; sub[1].insert(1);
	for (int i = 2; i <= n; i++) {
		if (n * (tot - 1) > 20000) return 0;
		for (int j = 1; j <= tot; j++) {
			if (sub[j].empty()) continue;
			cout << "? " << sub[j].size() + 1 << " " << i << " ";
			tmp = sub[j];
			for (set<int>::iterator it = tmp.begin(); it != tmp.end(); it++) cout << *it << " "; cout << endl;
			int u, v;
			cin >> u >> v;
			if (u != i) swap(u, v);
			if (u == -1 && v == -1) {
			}
			else {
				g[u].pb(v), g[v].pb(u); m++; ind[u]++, ind[v]++;
				while (true) {
					tmp.erase(v);
					if (tmp.empty()) break;
					cout << "? " << tmp.size() + 1 << " " << i << " ";
					for (set<int>::iterator it = tmp.begin(); it != tmp.end(); it++) cout << *it << " "; cout << endl;
					cin >> u >> v;
					if (u != i) swap(u, v); 
					if (v != -1) {
						g[u].pb(v), g[v].pb(u); m++; ind[u]++, ind[v]++;
					} else break;
				}
			}
		}
		for (int i = 1; i <= tot; i++) sub[i].clear();
		getsub(i);
		for (int j = 1; j <= i; j++) sub[col[j]].insert(j);
	}
	cout << "! " << m << endl;
	for (int i = 1; i <= n; i++) {
		for (int j = 0; j < g[i].size(); j++)
			if (g[i][j] > i) cout << i << " " << g[i][j] << endl;
	}
	return 0;
}

Details

Tip: Click on the bar to expand more detailed information

Test #1:

score: 100
Accepted
time: 4ms
memory: 5020kb

input:

3
1 2
1 3
2 3

output:

? 2 2 1 
? 2 3 1 
? 2 3 2 
! 3
2 1
3 1
3 2

result:

ok correct

Test #2:

score: 0
Accepted
time: 5ms
memory: 4952kb

input:

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

output:

? 2 2 1 
? 2 3 1 
? 2 3 2 
? 2 4 1 
? 3 4 2 3 
? 2 5 1 
? 4 5 2 3 4 
? 3 5 3 4 
? 2 5 3 
? 3 6 1 5 
? 4 6 2 3 4 
? 3 6 3 4 
? 4 7 1 5 6 
? 4 7 2 3 4 
? 3 7 2 4 
? 5 8 1 5 6 7 
? 4 8 2 3 4 
? 3 8 2 3 
? 2 8 2 
? 6 9 1 5 6 7 8 
? 4 9 2 3 4 
? 3 9 2 4 
? 7 10 1 5 6 7 8 9 
? 4 10 2 3 4 
? 3 10 2 3 
? 2 ...

result:

ok correct

Test #3:

score: 0
Accepted
time: 4ms
memory: 5024kb

input:

5
2 1
3 1
3 2
4 1
4 2
-1 -1
5 1
5 2
-1 -1

output:

? 2 2 1 
? 2 3 1 
? 2 3 2 
? 2 4 1 
? 2 4 2 
? 2 4 3 
? 2 5 1 
? 2 5 2 
? 3 5 3 4 
! 7
2 1
3 1
3 2
4 1
4 2
5 1
5 2

result:

ok correct

Test #4:

score: 0
Accepted
time: 4ms
memory: 5056kb

input:

3
2 1
1 3
-1 -1

output:

? 2 2 1 
? 2 3 1 
? 2 3 2 
! 2
2 1
3 1

result:

ok correct

Test #5:

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

input:

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

output:

? 2 2 1 
? 2 3 1 
? 2 3 2 
? 2 4 1 
? 2 4 2 
? 2 4 3 
? 3 5 1 4 
? 2 5 1 
? 2 5 2 
? 2 5 3 
? 3 6 1 4 
? 2 6 2 
? 2 6 3 
? 2 6 5 
! 9
2 1
3 1
3 2
4 2
4 3
5 4
5 2
5 3
6 3

result:

ok correct

Test #6:

score: 0
Accepted
time: 6ms
memory: 4976kb

input:

27
-1 -1
3 1
3 2
-1 -1
-1 -1
1 5
2 5
3 5
-1 -1
6 1
-1 -1
-1 -1
-1 -1
-1 -1
-1 -1
-1 -1
1 8
-1 -1
-1 -1
6 8
-1 -1
1 9
-1 -1
-1 -1
-1 -1
-1 -1
10 8
-1 -1
-1 -1
1 11
-1 -1
4 11
-1 -1
6 11
5 11
-1 -1
-1 -1
-1 -1
5 12
-1 -1
12 11
-1 -1
8 13
-1 -1
5 13
6 13
10 13
-1 -1
14 1
-1 -1
14 12
14 8
-1 -1
14 5
6 1...

output:

? 2 2 1 
? 3 3 1 2 
? 2 3 2 
? 3 4 1 2 
? 2 4 3 
? 3 5 1 2 
? 2 5 2 
? 3 5 3 4 
? 2 5 4 
? 3 6 1 2 
? 2 6 2 
? 3 6 3 4 
? 2 6 5 
? 3 7 1 2 
? 3 7 3 4 
? 3 7 5 6 
? 4 8 1 2 7 
? 3 8 2 7 
? 3 8 3 4 
? 3 8 5 6 
? 2 8 5 
? 4 9 1 2 7 
? 3 9 2 7 
? 4 9 3 4 8 
? 3 9 5 6 
? 4 10 1 2 7 
? 5 10 3 4 8 9 
? 4 1...

result:

ok correct

Test #7:

score: 0
Accepted
time: 7ms
memory: 5096kb

input:

47
-1 -1
-1 -1
-1 -1
5 4
5 3
-1 -1
-1 -1
-1 -1
-1 -1
7 5
7 6
-1 -1
5 8
-1 -1
9 4
-1 -1
-1 -1
10 7
-1 -1
-1 -1
11 1
7 11
-1 -1
-1 -1
12 3
7 12
2 12
-1 -1
11 12
5 12
-1 -1
13 7
-1 -1
13 11
13 5
-1 -1
-1 -1
-1 -1
-1 -1
-1 -1
4 15
-1 -1
-1 -1
13 15
-1 -1
16 1
-1 -1
-1 -1
-1 -1
17 7
17 8
17 3
17 1
-1 -1
...

output:

? 2 2 1 
? 3 3 1 2 
? 4 4 1 2 3 
? 5 5 1 2 3 4 
? 4 5 1 2 3 
? 3 5 1 2 
? 5 6 1 2 3 4 
? 2 6 5 
? 5 7 1 2 3 4 
? 3 7 5 6 
? 2 7 6 
? 6 8 1 2 3 4 7 
? 3 8 5 6 
? 2 8 6 
? 7 9 1 2 3 4 7 8 
? 6 9 1 2 3 7 8 
? 3 9 5 6 
? 7 10 1 2 3 4 7 8 
? 6 10 1 2 3 4 8 
? 4 10 5 6 9 
? 7 11 1 2 3 4 7 8 
? 6 11 2 3 4 ...

result:

ok correct

Test #8:

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

input:

38
-1 -1
-1 -1
4 1
-1 -1
1 5
3 5
-1 -1
4 5
-1 -1
4 6
-1 -1
2 7
-1 -1
4 7
6 7
7 5
-1 -1
-1 -1
-1 -1
-1 -1
-1 -1
-1 -1
-1 -1
-1 -1
-1 -1
4 10
-1 -1
-1 -1
11 1
-1 -1
11 4
-1 -1
-1 -1
12 8
-1 -1
-1 -1
-1 -1
11 12
12 7
-1 -1
13 1
13 8
-1 -1
4 13
13 12
-1 -1
11 13
-1 -1
3 14
1 14
-1 -1
-1 -1
14 5
6 14
-1 ...

output:

? 2 2 1 
? 3 3 1 2 
? 4 4 1 2 3 
? 3 4 2 3 
? 4 5 1 2 3 
? 3 5 2 3 
? 2 5 2 
? 2 5 4 
? 4 6 1 2 3 
? 2 6 4 
? 2 6 5 
? 4 7 1 2 3 
? 3 7 1 3 
? 2 7 4 
? 3 7 5 6 
? 2 7 5 
? 4 8 1 2 3 
? 2 8 4 
? 3 8 5 6 
? 2 8 7 
? 5 9 1 2 3 8 
? 2 9 4 
? 3 9 5 6 
? 2 9 7 
? 5 10 1 2 3 8 
? 2 10 4 
? 4 10 5 6 9 
? 2 ...

result:

ok correct

Test #9:

score: 0
Accepted
time: 5ms
memory: 5016kb

input:

25
-1 -1
-1 -1
-1 -1
5 4
5 2
-1 -1
6 4
-1 -1
-1 -1
7 3
-1 -1
5 7
-1 -1
4 8
2 8
-1 -1
5 8
-1 -1
-1 -1
9 4
2 9
-1 -1
-1 -1
9 8
-1 -1
10 3
-1 -1
-1 -1
-1 -1
2 11
-1 -1
9 11
-1 -1
10 11
-1 -1
12 4
-1 -1
6 12
-1 -1
-1 -1
-1 -1
-1 -1
6 13
5 13
-1 -1
13 8
7 13
-1 -1
-1 -1
14 13
14 3
14 4
-1 -1
5 14
-1 -1
7...

output:

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

result:

ok correct

Test #10:

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

input:

6
-1 -1
2 3
-1 -1
-1 -1
-1 -1
2 5
-1 -1
-1 -1
-1 -1
5 6
-1 -1

output:

? 2 2 1 
? 3 3 1 2 
? 2 3 1 
? 3 4 1 2 
? 2 4 3 
? 3 5 1 2 
? 2 5 1 
? 3 5 3 4 
? 3 6 1 2 
? 4 6 3 4 5 
? 3 6 3 4 
! 3
3 2
5 2
6 5

result:

ok correct

Test #11:

score: 0
Accepted
time: 1ms
memory: 4944kb

input:

3
2 1
3 1
2 3

output:

? 2 2 1 
? 2 3 1 
? 2 3 2 
! 3
2 1
3 1
3 2

result:

ok correct

Test #12:

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

input:

3
2 1
3 1
-1 -1

output:

? 2 2 1 
? 2 3 1 
? 2 3 2 
! 2
2 1
3 1

result:

ok correct

Test #13:

score: 0
Accepted
time: 1ms
memory: 4980kb

input:

5
2 1
3 1
2 3
-1 -1
-1 -1
-1 -1
5 1
2 5
-1 -1
-1 -1

output:

? 2 2 1 
? 2 3 1 
? 2 3 2 
? 2 4 1 
? 2 4 2 
? 2 4 3 
? 2 5 1 
? 3 5 2 4 
? 2 5 4 
? 2 5 3 
! 5
2 1
3 1
3 2
5 1
5 2

result:

ok correct

Test #14:

score: 0
Accepted
time: 1ms
memory: 5096kb

input:

3
2 1
-1 -1
-1 -1

output:

? 2 2 1 
? 2 3 1 
? 2 3 2 
! 1
2 1

result:

ok correct

Test #15:

score: 0
Accepted
time: 4ms
memory: 5016kb

input:

5
-1 -1
-1 -1
4 3
-1 -1
2 5
3 5
-1 -1
-1 -1

output:

? 2 2 1 
? 3 3 1 2 
? 4 4 1 2 3 
? 3 4 1 2 
? 4 5 1 2 3 
? 3 5 1 3 
? 2 5 1 
? 2 5 4 
! 3
4 3
5 2
5 3

result:

ok correct

Test #16:

score: 0
Accepted
time: 17ms
memory: 5116kb

input:

93
-1 -1
-1 -1
-1 -1
-1 -1
-1 -1
-1 -1
-1 -1
-1 -1
10 9
-1 -1
7 11
-1 -1
-1 -1
2 12
-1 -1
-1 -1
5 13
-1 -1
-1 -1
-1 -1
-1 -1
-1 -1
15 12
-1 -1
6 16
8 16
-1 -1
-1 -1
-1 -1
-1 -1
-1 -1
-1 -1
19 18
-1 -1
11 19
-1 -1
-1 -1
20 16
-1 -1
-1 -1
-1 -1
-1 -1
-1 -1
-1 -1
-1 -1
-1 -1
8 23
1 23
-1 -1
-1 -1
-1 -1...

output:

? 2 2 1 
? 3 3 1 2 
? 4 4 1 2 3 
? 5 5 1 2 3 4 
? 6 6 1 2 3 4 5 
? 7 7 1 2 3 4 5 6 
? 8 8 1 2 3 4 5 6 7 
? 9 9 1 2 3 4 5 6 7 8 
? 10 10 1 2 3 4 5 6 7 8 9 
? 9 10 1 2 3 4 5 6 7 8 
? 10 11 1 2 3 4 5 6 7 8 9 
? 9 11 1 2 3 4 5 6 8 9 
? 2 11 10 
? 10 12 1 2 3 4 5 6 7 8 9 
? 9 12 1 3 4 5 6 7 8 9 
? 3 12 1...

result:

ok correct

Test #17:

score: -100
Memory Limit Exceeded

input:

111
-1 -1
-1 -1
-1 -1
-1 -1
-1 -1
-1 -1
-1 -1
-1 -1
-1 -1
-1 -1
-1 -1
2 6
-1 -1
-1 -1
-1 -1
-1 -1
-1 -1
7 4
-1 -1
-1 -1
-1 -1
3 8
-1 -1
-1 -1
-1 -1
-1 -1
-1 -1
-1 -1
-1 -1
-1 -1
-1 -1
-1 -1
-1 -1
-1 -1
-1 -1
-1 -1
-1 -1
-1 -1
-1 -1
-1 -1
2 11
-1 -1
4 11
12 4
-1 -1
-1 -1
-1 -1
-1 -1
-1 -1
6 12
7 12
1...

output:

? 2 2 1 
? 2 3 1 
? 2 3 2 
? 2 4 1 
? 2 4 2 
? 2 4 3 
? 2 5 1 
? 2 5 2 
? 2 5 3 
? 2 5 4 
? 2 6 1 
? 2 6 2 
? 2 6 3 
? 2 6 4 
? 2 6 5 
? 3 7 1 6 
? 2 7 3 
? 2 7 4 
? 2 7 5 
? 2 7 2 
? 4 8 1 6 7 
? 2 8 3 
? 2 8 5 
? 2 8 2 
? 2 8 4 
? 5 9 1 6 7 8 
? 2 9 5 
? 2 9 2 
? 2 9 3 
? 2 9 4 
? 5 10 1 6 7 8 
? ...

result: