Submission #204210
Source Code Expand
#include "animals.h"
#include <algorithm>
#include <vector>
#include <queue>
#include <set>
#define rep(i,n) for(int i = 0; i < n; ++i)
#define each(i,n) for(set<int>::iterator i = n.begin(); i != n.end(); ++i)
#define fi first
#define se second
using namespace std;
typedef pair<int,int> P;
const int MX = 100005;
set<int> to[MX];
int sv[MX], tv[MX], k, kv[MX];
int m[MX];
priority_queue<P> q;
struct seg {
vector<int> d;
int sz;
seg() {}
seg(int mx) {
sz = 1;
while (sz <= mx) sz <<= 1;
d.resize(sz << 1, 0);
}
void add(int a, int b, int x, int i=1, int l=0, int r=-1) {
if (r == -1) r = sz;
if (a <= l && r <= b) {
d[i] = max(d[i], x);
return;
}
int c = l+r>>1;
if (a < c) add(a, b, x, i<<1, l, c);
if (c < b) add(a, b, x, i<<1|1, c, r);
}
int get(int i) {
i += sz;
int res = -1;
while (i) {
res = max(res, d[i]);
i >>= 1;
}
return res;
}
} t;
void dfs(int v, int p = -1){
kv[k] = v;
sv[v] = k++;
each(it, to[v]) {
int u = *it;
if(u == p) continue;
dfs(u, v);
}
tv[v] = k;
}
void addEdge(int v, int u) {
to[v].insert(u);
to[u].insert(v);
}
void init(int N, int E[][2]) {
rep(i,N-1) addEdge(E[i][0], E[i][1]);
dfs(0);
t = seg(N);
m[0] = N;
q.push(P(N, 0));
}
void calcSize(int v, int u) {
int tot = m[v];
queue<P> qv, qu;
qv.push(P(v,-1));
qu.push(P(u,-1));
int cnt = 0;
while (!qv.empty() && !qu.empty()) {
//printf("%d %d\n",(int)qv.size(), (int)qu.size());
//printf("front : %d %d\n",(int)qv.front().fi, (int)qu.front().fi);
{
int nv = qv.front().fi, np = qv.front().se; qv.pop();
each(it, to[nv]) {
int nu = *it;
if (nu == np) continue;
qv.push(P(nu, nv));
}
}
{
int nv = qu.front().fi, np = qu.front().se; qu.pop();
each(it, to[nv]) {
int nu = *it;
if (nu == np) continue;
qu.push(P(nu, nv));
}
}
++cnt;
}
if (qv.empty()) {
m[v] = cnt;
m[u] = tot - cnt;
} else {
m[u] = cnt;
m[v] = tot - cnt;
}
}
void cut(int v, int u) {
to[v].erase(u);
to[u].erase(v);
if (sv[v] > sv[u]) swap(v,u);
int vx = kv[t.get(sv[v])];
calcSize(vx, u);
q.push(P(m[vx], vx));
q.push(P(m[u], u));
t.add(sv[u], tv[u], sv[u]);
while (1) {
P p = q.top();
if (m[p.se] == p.fi) break;
q.pop();
}
}
int query(int v) {
while (!to[v].empty()) cut(v, *(to[v].begin()));
return q.top().fi;
}
Submission Info
Compile Error
./grader.cpp: In function ‘int main()’:
./grader.cpp:15: warning: ignoring return value of ‘int scanf(const char*, ...)’, declared with attribute warn_unused_result
./grader.cpp:17: warning: ignoring return value of ‘int scanf(const char*, ...)’, declared with attribute warn_unused_result
./grader.cpp:22: warning: ignoring return value of ‘int scanf(const char*, ...)’, declared with attribute warn_unused_result
Judge Result
Set Name |
Subtask1 |
Subtask2 |
Subtask3 |
Score / Max Score |
20 / 20 |
25 / 25 |
0 / 55 |
Status |
|
|
|
Set Name |
Test Cases |
Subtask1 |
subtask1/1, subtask1/10, subtask1/11, subtask1/12, subtask1/13, subtask1/14, subtask1/15, subtask1/16, subtask1/17, subtask1/18, subtask1/19, subtask1/2, subtask1/3, subtask1/4, subtask1/5, subtask1/6, subtask1/7, subtask1/8, subtask1/9 |
Subtask2 |
subtask2/1, subtask2/10, subtask2/11, subtask2/2, subtask2/3, subtask2/4, subtask2/5, subtask2/6, subtask2/7, subtask2/8, subtask2/9 |
Subtask3 |
subtask3/1, subtask3/10, subtask3/11, subtask3/12, subtask3/13, subtask3/14, subtask3/15, subtask3/16, subtask3/2, subtask3/3, subtask3/4, subtask3/5, subtask3/6, subtask3/7, subtask3/8, subtask3/9 |
Case Name |
Status |
Exec Time |
Memory |
subtask1/1 |
AC |
383 ms |
6036 KB |
subtask1/10 |
AC |
49 ms |
6172 KB |
subtask1/11 |
AC |
47 ms |
6240 KB |
subtask1/12 |
AC |
48 ms |
6284 KB |
subtask1/13 |
AC |
49 ms |
6168 KB |
subtask1/14 |
AC |
49 ms |
6180 KB |
subtask1/15 |
AC |
49 ms |
6168 KB |
subtask1/16 |
AC |
49 ms |
6188 KB |
subtask1/17 |
AC |
49 ms |
6276 KB |
subtask1/18 |
AC |
49 ms |
6176 KB |
subtask1/19 |
AC |
48 ms |
6164 KB |
subtask1/2 |
AC |
42 ms |
6036 KB |
subtask1/3 |
AC |
41 ms |
6028 KB |
subtask1/4 |
AC |
41 ms |
6144 KB |
subtask1/5 |
AC |
41 ms |
6036 KB |
subtask1/6 |
AC |
41 ms |
6156 KB |
subtask1/7 |
AC |
42 ms |
6156 KB |
subtask1/8 |
AC |
45 ms |
6156 KB |
subtask1/9 |
AC |
47 ms |
6156 KB |
subtask2/1 |
AC |
41 ms |
6128 KB |
subtask2/10 |
AC |
892 ms |
26772 KB |
subtask2/11 |
AC |
783 ms |
24084 KB |
subtask2/2 |
AC |
44 ms |
6128 KB |
subtask2/3 |
AC |
43 ms |
6168 KB |
subtask2/4 |
AC |
49 ms |
6208 KB |
subtask2/5 |
AC |
116 ms |
7992 KB |
subtask2/6 |
AC |
450 ms |
16408 KB |
subtask2/7 |
AC |
880 ms |
26772 KB |
subtask2/8 |
AC |
925 ms |
26768 KB |
subtask2/9 |
AC |
967 ms |
26784 KB |
subtask3/1 |
AC |
51 ms |
6168 KB |
subtask3/10 |
AC |
812 ms |
24088 KB |
subtask3/11 |
AC |
1020 ms |
22032 KB |
subtask3/12 |
AC |
1014 ms |
22036 KB |
subtask3/13 |
AC |
1016 ms |
22056 KB |
subtask3/14 |
AC |
1029 ms |
22036 KB |
subtask3/15 |
AC |
1012 ms |
22044 KB |
subtask3/16 |
AC |
1058 ms |
22040 KB |
subtask3/2 |
AC |
51 ms |
6172 KB |
subtask3/3 |
AC |
49 ms |
6168 KB |
subtask3/4 |
AC |
57 ms |
6176 KB |
subtask3/5 |
AC |
49 ms |
6172 KB |
subtask3/6 |
AC |
903 ms |
26768 KB |
subtask3/7 |
AC |
890 ms |
26652 KB |
subtask3/8 |
TLE |
2039 ms |
19468 KB |
subtask3/9 |
TLE |
2043 ms |
20028 KB |