/*
IOI 2017
Problem: Finding Spanning Tree
Author: PrinceOfPersia
Subtask: 3
*/
#include <iostream>
#include <algorithm>
#include <set>
#include <vector>
#include <string>
#include <map>
#include <cmath>
#include <cstdio>
#include <cstring>
#include "simurgh.h"
using namespace std;
#define Foreach(i, c) for(__typeof((c).begin()) i = (c).begin(); i != (c).end(); ++i)
#define For(i,a,b) for(int (i)=(a);(i) < (b); ++(i))
#define rof(i,a,b) for(int (i)=(a);(i) > (b); --(i))
#define rep(i, c) for(auto &(i) : (c))
#define x first
#define y second
#define pb push_back
#define PB pop_back()
#define iOS ios_base::sync_with_stdio(false)
#define sqr(a) (((a) * (a)))
#define all(a) a.begin() , a.end()
#define error(x) cerr << #x << " = " << (x) <<endl
#define Error(a,b) cerr<<"( "<<#a<<" , "<<#b<<" ) = ( "<<(a)<<" , "<<(b)<<" )\n";
#define errop(a) cerr<<#a<<" = ( "<<((a).x)<<" , "<<((a).y)<<" )\n";
#define coud(a,b) cout<<fixed << setprecision((b)) << (a)
#define L(x) ((x)<<1)
#define R(x) (((x)<<1)+1)
#define umap unordered_map
#define double long double
typedef long long ll;
typedef pair<int,int>pii;
typedef vector<int> vi;
template <class T> inline void smax(T &x,T y){ x = max((x), (y));}
template <class T> inline void smin(T &x,T y){ x = min((x), (y));}
template <class T> inline void sminmax(T &mn, T &mx, T x){smin(mn, x), smax(mx, x);}
const int maxn = 512, maxm = maxn * maxn / 2;
bool mark[maxn];
int h[maxn], ind[maxn][maxn], par[maxn], n, m, state[maxm], last_num[maxm];
int __edges[maxn];
vi __edges_vec;
vi adj[maxn];
pii edges[maxm];
bool bit[maxm];
int _next_ = 1;
int _last_id[maxm];
inline void _renew(){
vi __edges_new;
rep(i, __edges_vec) if(bit[i] && _last_id[i] != _next_)
__edges_new.pb(i), _last_id[i] = _next_;
++ _next_;
__edges_vec = __edges_new;
}
vi __ans;
inline int query(){
_renew();
int res = count_common_roads(__edges_vec);
if(res == n-1)
__ans = __edges_vec;
return res;
}
inline void toggle(int i){
if(!bit[i]){
bit[i] = true;
__edges_vec.pb(i);
}
else
bit[i] = false;
}
inline void reset(){
while(!__edges_vec.empty()){
int e = __edges_vec.back();
__edges_vec.PB;
bit[e] = false;
}
}
vi back_edges[maxn];
inline void dfs(int v = 0, int p = -1){
if(~p) h[v] = h[p] + 1;
mark[v] = true;
par[v] = p;
rep(u, adj[v])
if(!mark[u])
dfs(u, v);
if(~p)
toggle(ind[v][p]);
}
int tree_score;
inline void DFS(int v = 0){
rep(u, adj[v]){
if(v == par[u])
DFS(u);
else if(u != par[v] && h[u] < h[v]){
int e = ind[v][u];
int cur = v;
while(cur != u){
back_edges[cur].pb(e);
cur = par[cur];
}
}
}
if(~par[v]){
int e2p = ind[v][par[v]];
int for_a_one = -1, mn = tree_score, mx = mn;
last_num[e2p] = tree_score;
toggle(e2p);
rep(e, back_edges[v]){
if(min(for_a_one, state[e]) == -1){
toggle(e);
last_num[e] = query();
if(~state[e])
for_a_one = last_num[e] + (!state[e]);
sminmax(mn, mx, last_num[e]);
toggle(e);
}
}
toggle(e2p);
smax(mx, for_a_one);
state[e2p] = tree_score == mx;
rep(e, back_edges[v]) if(state[e] == -1)
state[e] = last_num[e] == mx;
}
}
vi find_roads(int n, vi v, vi u){
::n = n;
m = v.size();
memset(ind, -1, sizeof ind);
memset(state, -1, sizeof state);
For(i,0,m){
edges[i] = {v[i], u[i]};
ind[v[i]][u[i]] = ind[u[i]][v[i]] = i;
adj[v[i]].pb(u[i]), adj[u[i]].pb(v[i]);
}
dfs();
tree_score = query();
DFS();
reset();
For(i,0,m) if(state[i] == 1)
toggle(i);
query();
return __ans;
}
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
0 ms |
5772 KB |
correct |
2 |
Correct |
0 ms |
5772 KB |
correct |
3 |
Correct |
0 ms |
5772 KB |
correct |
4 |
Correct |
0 ms |
5772 KB |
correct |
5 |
Correct |
0 ms |
5772 KB |
correct |
6 |
Correct |
0 ms |
5772 KB |
correct |
7 |
Correct |
0 ms |
5772 KB |
correct |
8 |
Correct |
0 ms |
5772 KB |
correct |
9 |
Correct |
0 ms |
5772 KB |
correct |
10 |
Correct |
0 ms |
5772 KB |
correct |
11 |
Correct |
0 ms |
5772 KB |
correct |
12 |
Correct |
0 ms |
5772 KB |
correct |
13 |
Correct |
0 ms |
5772 KB |
correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
0 ms |
5772 KB |
correct |
2 |
Correct |
0 ms |
5772 KB |
correct |
3 |
Correct |
0 ms |
5772 KB |
correct |
4 |
Correct |
0 ms |
5772 KB |
correct |
5 |
Correct |
0 ms |
5772 KB |
correct |
6 |
Correct |
0 ms |
5772 KB |
correct |
7 |
Correct |
0 ms |
5772 KB |
correct |
8 |
Correct |
0 ms |
5772 KB |
correct |
9 |
Correct |
0 ms |
5772 KB |
correct |
10 |
Correct |
0 ms |
5772 KB |
correct |
11 |
Correct |
0 ms |
5772 KB |
correct |
12 |
Correct |
0 ms |
5772 KB |
correct |
13 |
Correct |
0 ms |
5772 KB |
correct |
14 |
Correct |
3 ms |
5904 KB |
correct |
15 |
Correct |
3 ms |
5904 KB |
correct |
16 |
Correct |
3 ms |
5904 KB |
correct |
17 |
Correct |
3 ms |
5904 KB |
correct |
18 |
Correct |
0 ms |
5904 KB |
correct |
19 |
Correct |
0 ms |
5904 KB |
correct |
20 |
Correct |
3 ms |
5904 KB |
correct |
21 |
Correct |
3 ms |
5904 KB |
correct |
22 |
Correct |
3 ms |
5904 KB |
correct |
23 |
Correct |
0 ms |
5772 KB |
correct |
24 |
Correct |
0 ms |
5772 KB |
correct |
25 |
Correct |
0 ms |
5772 KB |
correct |
26 |
Correct |
0 ms |
5772 KB |
correct |
27 |
Correct |
0 ms |
5772 KB |
correct |
28 |
Correct |
0 ms |
5772 KB |
correct |
29 |
Correct |
0 ms |
5772 KB |
correct |
30 |
Correct |
0 ms |
5904 KB |
correct |
31 |
Correct |
0 ms |
5904 KB |
correct |
32 |
Correct |
0 ms |
5904 KB |
correct |
33 |
Correct |
0 ms |
5904 KB |
correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
0 ms |
5772 KB |
correct |
2 |
Correct |
0 ms |
5772 KB |
correct |
3 |
Correct |
0 ms |
5772 KB |
correct |
4 |
Correct |
0 ms |
5772 KB |
correct |
5 |
Correct |
0 ms |
5772 KB |
correct |
6 |
Correct |
0 ms |
5772 KB |
correct |
7 |
Correct |
0 ms |
5772 KB |
correct |
8 |
Correct |
0 ms |
5772 KB |
correct |
9 |
Correct |
0 ms |
5772 KB |
correct |
10 |
Correct |
0 ms |
5772 KB |
correct |
11 |
Correct |
0 ms |
5772 KB |
correct |
12 |
Correct |
0 ms |
5772 KB |
correct |
13 |
Correct |
0 ms |
5772 KB |
correct |
14 |
Correct |
3 ms |
5904 KB |
correct |
15 |
Correct |
3 ms |
5904 KB |
correct |
16 |
Correct |
3 ms |
5904 KB |
correct |
17 |
Correct |
3 ms |
5904 KB |
correct |
18 |
Correct |
0 ms |
5904 KB |
correct |
19 |
Correct |
0 ms |
5904 KB |
correct |
20 |
Correct |
3 ms |
5904 KB |
correct |
21 |
Correct |
3 ms |
5904 KB |
correct |
22 |
Correct |
3 ms |
5904 KB |
correct |
23 |
Correct |
0 ms |
5772 KB |
correct |
24 |
Correct |
0 ms |
5772 KB |
correct |
25 |
Correct |
0 ms |
5772 KB |
correct |
26 |
Correct |
0 ms |
5772 KB |
correct |
27 |
Correct |
0 ms |
5772 KB |
correct |
28 |
Correct |
0 ms |
5772 KB |
correct |
29 |
Correct |
0 ms |
5772 KB |
correct |
30 |
Correct |
0 ms |
5904 KB |
correct |
31 |
Correct |
0 ms |
5904 KB |
correct |
32 |
Correct |
0 ms |
5904 KB |
correct |
33 |
Correct |
0 ms |
5904 KB |
correct |
34 |
Correct |
173 ms |
18836 KB |
correct |
35 |
Correct |
163 ms |
18732 KB |
correct |
36 |
Correct |
106 ms |
15952 KB |
correct |
37 |
Correct |
6 ms |
6168 KB |
correct |
38 |
Correct |
179 ms |
18980 KB |
correct |
39 |
Correct |
153 ms |
17968 KB |
correct |
40 |
Correct |
116 ms |
16000 KB |
correct |
41 |
Correct |
196 ms |
18800 KB |
correct |
42 |
Correct |
186 ms |
18944 KB |
correct |
43 |
Correct |
83 ms |
10288 KB |
correct |
44 |
Correct |
69 ms |
8708 KB |
correct |
45 |
Correct |
73 ms |
9264 KB |
correct |
46 |
Correct |
59 ms |
8264 KB |
correct |
47 |
Correct |
26 ms |
6300 KB |
correct |
48 |
Correct |
3 ms |
5772 KB |
correct |
49 |
Correct |
6 ms |
5904 KB |
correct |
50 |
Correct |
19 ms |
6300 KB |
correct |
51 |
Correct |
86 ms |
9264 KB |
correct |
52 |
Correct |
63 ms |
8704 KB |
correct |
53 |
Correct |
56 ms |
8260 KB |
correct |
54 |
Correct |
83 ms |
10296 KB |
correct |
55 |
Correct |
89 ms |
12352 KB |
correct |
56 |
Correct |
83 ms |
12200 KB |
correct |
57 |
Correct |
93 ms |
12332 KB |
correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
0 ms |
5772 KB |
correct |
2 |
Correct |
0 ms |
5772 KB |
correct |
3 |
Incorrect |
149 ms |
22828 KB |
WA in grader: NO |
4 |
Halted |
0 ms |
0 KB |
- |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
0 ms |
5772 KB |
correct |
2 |
Correct |
0 ms |
5772 KB |
correct |
3 |
Correct |
0 ms |
5772 KB |
correct |
4 |
Correct |
0 ms |
5772 KB |
correct |
5 |
Correct |
0 ms |
5772 KB |
correct |
6 |
Correct |
0 ms |
5772 KB |
correct |
7 |
Correct |
0 ms |
5772 KB |
correct |
8 |
Correct |
0 ms |
5772 KB |
correct |
9 |
Correct |
0 ms |
5772 KB |
correct |
10 |
Correct |
0 ms |
5772 KB |
correct |
11 |
Correct |
0 ms |
5772 KB |
correct |
12 |
Correct |
0 ms |
5772 KB |
correct |
13 |
Correct |
0 ms |
5772 KB |
correct |
14 |
Correct |
3 ms |
5904 KB |
correct |
15 |
Correct |
3 ms |
5904 KB |
correct |
16 |
Correct |
3 ms |
5904 KB |
correct |
17 |
Correct |
3 ms |
5904 KB |
correct |
18 |
Correct |
0 ms |
5904 KB |
correct |
19 |
Correct |
0 ms |
5904 KB |
correct |
20 |
Correct |
3 ms |
5904 KB |
correct |
21 |
Correct |
3 ms |
5904 KB |
correct |
22 |
Correct |
3 ms |
5904 KB |
correct |
23 |
Correct |
0 ms |
5772 KB |
correct |
24 |
Correct |
0 ms |
5772 KB |
correct |
25 |
Correct |
0 ms |
5772 KB |
correct |
26 |
Correct |
0 ms |
5772 KB |
correct |
27 |
Correct |
0 ms |
5772 KB |
correct |
28 |
Correct |
0 ms |
5772 KB |
correct |
29 |
Correct |
0 ms |
5772 KB |
correct |
30 |
Correct |
0 ms |
5904 KB |
correct |
31 |
Correct |
0 ms |
5904 KB |
correct |
32 |
Correct |
0 ms |
5904 KB |
correct |
33 |
Correct |
0 ms |
5904 KB |
correct |
34 |
Correct |
173 ms |
18836 KB |
correct |
35 |
Correct |
163 ms |
18732 KB |
correct |
36 |
Correct |
106 ms |
15952 KB |
correct |
37 |
Correct |
6 ms |
6168 KB |
correct |
38 |
Correct |
179 ms |
18980 KB |
correct |
39 |
Correct |
153 ms |
17968 KB |
correct |
40 |
Correct |
116 ms |
16000 KB |
correct |
41 |
Correct |
196 ms |
18800 KB |
correct |
42 |
Correct |
186 ms |
18944 KB |
correct |
43 |
Correct |
83 ms |
10288 KB |
correct |
44 |
Correct |
69 ms |
8708 KB |
correct |
45 |
Correct |
73 ms |
9264 KB |
correct |
46 |
Correct |
59 ms |
8264 KB |
correct |
47 |
Correct |
26 ms |
6300 KB |
correct |
48 |
Correct |
3 ms |
5772 KB |
correct |
49 |
Correct |
6 ms |
5904 KB |
correct |
50 |
Correct |
19 ms |
6300 KB |
correct |
51 |
Correct |
86 ms |
9264 KB |
correct |
52 |
Correct |
63 ms |
8704 KB |
correct |
53 |
Correct |
56 ms |
8260 KB |
correct |
54 |
Correct |
83 ms |
10296 KB |
correct |
55 |
Correct |
89 ms |
12352 KB |
correct |
56 |
Correct |
83 ms |
12200 KB |
correct |
57 |
Correct |
93 ms |
12332 KB |
correct |
58 |
Correct |
0 ms |
5772 KB |
correct |
59 |
Correct |
0 ms |
5772 KB |
correct |
60 |
Incorrect |
149 ms |
22828 KB |
WA in grader: NO |
61 |
Halted |
0 ms |
0 KB |
- |