Submission #121418

# Submission time Handle Problem Language Result Execution time Memory
121418 2019-06-26T13:48:08 Z abacaba Bridges (APIO19_bridges) C++14
59 / 100
3000 ms 14024 KB
#include <bits/stdc++.h>
using namespace std;

#pragma GCC optimize("Ofast,unroll-loops")
#pragma GCC target("avx,avx2,fma")

#define max3(a, b, c) max(a, max(b, c))
#define min3(a, b, c) min(a, min(b, c))
#define mp make_pair
#define e first
#define w second
#define pb push_back
#define ppb pop_back
#define ll long long
#define ull unsigned long long
#define cntbit(x) __builtin_popcount(x)
#define uset unordered_set
#define umap unordered_map
#define pii pair<int, int>
#define ld long double
#define pll pair<long long, long long>

struct edge {
	int u, v, w, ind;
	bool operator < (const edge &b) const {
		if(w == b.w)
			return ind > b.ind;
		return w > b.w;
	}
};

struct query {
	int v, w, updatesTillNow, ind;
	bool operator < (const query &b) const {
		return w > b.w;
	}
};

const int block = 550;
const int N = 1e5 + 1;
int n, m, q, ans[N], p[N], sz[N], szupd, szqq;
vector <int> g[N];
set <edge> edges;
vector <int> was;
edge last[N], back[N];
query qq[N];
pii upd[N];
edge e[N];
bool used[N], usedupd[N];

int find(int v) {
	if(v == p[v])
		return v;
	return p[v] = find(p[v]);
}

inline void unio(int a, int b) {
	a = find(a);
	b = find(b);
	if(a != b) {
		if(sz[a] < sz[b])
			swap(a, b);
		p[b] = a;
		sz[a] += sz[b];
	}
}


void dfs(int v, int ind, int w) {
	used[v] = true;
	was.pb(v);
	ans[ind] += sz[v];
	for(int to : g[v])
		if(!used[to])
			dfs(to, ind, w);
}


inline void solve() {
	sort(qq, qq + szqq);
	for(int i = 0; i < szupd; ++i)
		edges.erase(e[upd[i].e]);
	set <edge>::iterator it = edges.end();
	if(!edges.empty())
		it = edges.begin();
	for(int i = 1; i <= n; ++i)
		p[i] = i, sz[i] = 1;
	for(int k = 0; k < szqq; ++k) {
		query cur = qq[k];
		while(it != edges.end() && it->w >= cur.w) {
			unio(it->v, it->u);
			++it;
		}
		for(int i = cur.updatesTillNow - 1; i >= 0; --i) {
			if(!usedupd[upd[i].e]) {
				edge x = e[upd[i].e];
				x.w = upd[i].w;
				int a = find(x.u), b = find(x.v);
				if(x.w >= cur.w && a != b) {
					g[a].pb(b);
					g[b].pb(a);
				}
			}
			usedupd[upd[i].e] = true;
		}
		for(int i = cur.updatesTillNow; i < szupd; ++i) {
			if(!usedupd[upd[i].e]) {
				edge x = back[i];
				int a = find(x.u), b = find(x.v);
				if(x.w >= cur.w && a != b) {
					g[a].pb(b);
					g[b].pb(a);
				}
			}
			usedupd[upd[i].e] = true;
		}

		dfs(find(cur.v), cur.ind, cur.w);

		for(int i = 0; i < szupd; ++i) {
			usedupd[upd[i].e] = false;
			g[find(e[upd[i].e].u)].clear();
			g[find(e[upd[i].e].v)].clear();
		}

		while(!was.empty()) {
			used[was.back()] = false;
			was.ppb();
		}
	}
	for(int i = 0; i < szupd; ++i) {
		edges.erase(e[upd[i].e]);
		e[upd[i].e].w = upd[i].w;
		edges.insert(e[upd[i].e]);
	}
	szqq = szupd = 0; 
}

bool start[N];

int main() {
	scanf("%d%d", &n, &m);
	for(int i = 1; i <= m; ++i) {
		scanf("%d%d%d", &e[i].u, &e[i].v, &e[i].w);
		last[i] = e[i];
		e[i].ind = i;
		edges.insert(e[i]);
	}
	scanf("%d", &q);
	for(int i = block - 1; i <= q; i += block)
		start[i] = true;
	for(int i = 1; i <= q; ++i) {
		int c;
		scanf("%d", &c);
		if(c == 1) {
			scanf("%d%d", &upd[szupd].e, &upd[szupd].w);
			back[szupd] = last[upd[szupd].e];
			last[upd[szupd].e] = e[upd[szupd].e];
			last[upd[szupd].e].w = upd[szupd].w;
			++szupd;
		}
		else {
			scanf("%d%d", &qq[szqq].v, &qq[szqq].w);
			qq[szqq].updatesTillNow = szupd;
			qq[szqq].ind = i;
			++szqq;
		}
		if(start[i])
			solve();
	}
	solve();
	for(int i = 1; i <= q; ++i)
		if(ans[i])
			printf("%d\n", ans[i]);
	return 0;
}

Compilation message

bridges.cpp: In function 'int main()':
bridges.cpp:142:7: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
  scanf("%d%d", &n, &m);
  ~~~~~^~~~~~~~~~~~~~~~
bridges.cpp:144:8: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   scanf("%d%d%d", &e[i].u, &e[i].v, &e[i].w);
   ~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
bridges.cpp:149:7: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
  scanf("%d", &q);
  ~~~~~^~~~~~~~~~
bridges.cpp:154:8: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   scanf("%d", &c);
   ~~~~~^~~~~~~~~~
bridges.cpp:156:9: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
    scanf("%d%d", &upd[szupd].e, &upd[szupd].w);
    ~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
bridges.cpp:163:9: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
    scanf("%d%d", &qq[szqq].v, &qq[szqq].w);
    ~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# Verdict Execution time Memory Grader output
1 Correct 4 ms 2688 KB Output is correct
2 Correct 4 ms 2816 KB Output is correct
3 Correct 25 ms 3064 KB Output is correct
4 Correct 8 ms 2816 KB Output is correct
5 Correct 22 ms 2944 KB Output is correct
6 Correct 20 ms 2944 KB Output is correct
7 Correct 22 ms 2816 KB Output is correct
8 Correct 22 ms 3072 KB Output is correct
9 Correct 24 ms 2816 KB Output is correct
10 Correct 20 ms 2944 KB Output is correct
11 Correct 20 ms 2944 KB Output is correct
12 Correct 21 ms 2944 KB Output is correct
13 Correct 26 ms 3064 KB Output is correct
14 Correct 23 ms 2944 KB Output is correct
15 Correct 24 ms 2944 KB Output is correct
16 Correct 22 ms 2816 KB Output is correct
17 Correct 22 ms 2816 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 1561 ms 10156 KB Output is correct
2 Correct 1327 ms 10104 KB Output is correct
3 Correct 1519 ms 10024 KB Output is correct
4 Correct 1322 ms 9852 KB Output is correct
5 Correct 1382 ms 10068 KB Output is correct
6 Correct 1743 ms 9252 KB Output is correct
7 Correct 1529 ms 9208 KB Output is correct
8 Correct 1604 ms 9272 KB Output is correct
9 Correct 44 ms 3448 KB Output is correct
10 Correct 1136 ms 9808 KB Output is correct
11 Correct 1176 ms 9872 KB Output is correct
12 Correct 1167 ms 9224 KB Output is correct
13 Correct 1446 ms 9144 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 1209 ms 7960 KB Output is correct
2 Correct 627 ms 4728 KB Output is correct
3 Correct 1243 ms 8092 KB Output is correct
4 Correct 1086 ms 8056 KB Output is correct
5 Correct 44 ms 3448 KB Output is correct
6 Correct 1010 ms 8056 KB Output is correct
7 Correct 1138 ms 7928 KB Output is correct
8 Correct 987 ms 7928 KB Output is correct
9 Correct 572 ms 7544 KB Output is correct
10 Correct 551 ms 7416 KB Output is correct
11 Correct 783 ms 7800 KB Output is correct
12 Correct 904 ms 8056 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 2547 ms 13764 KB Output is correct
2 Correct 44 ms 3704 KB Output is correct
3 Correct 305 ms 12412 KB Output is correct
4 Correct 134 ms 12536 KB Output is correct
5 Correct 1771 ms 14000 KB Output is correct
6 Correct 2698 ms 13956 KB Output is correct
7 Correct 1523 ms 13824 KB Output is correct
8 Correct 648 ms 9080 KB Output is correct
9 Correct 692 ms 8888 KB Output is correct
10 Correct 711 ms 9080 KB Output is correct
11 Correct 1804 ms 11312 KB Output is correct
12 Correct 1491 ms 11328 KB Output is correct
13 Correct 1678 ms 11608 KB Output is correct
14 Correct 1201 ms 14024 KB Output is correct
15 Correct 941 ms 13944 KB Output is correct
16 Correct 2413 ms 13688 KB Output is correct
17 Correct 2211 ms 13712 KB Output is correct
18 Execution timed out 3039 ms 13708 KB Time limit exceeded
19 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 1561 ms 10156 KB Output is correct
2 Correct 1327 ms 10104 KB Output is correct
3 Correct 1519 ms 10024 KB Output is correct
4 Correct 1322 ms 9852 KB Output is correct
5 Correct 1382 ms 10068 KB Output is correct
6 Correct 1743 ms 9252 KB Output is correct
7 Correct 1529 ms 9208 KB Output is correct
8 Correct 1604 ms 9272 KB Output is correct
9 Correct 44 ms 3448 KB Output is correct
10 Correct 1136 ms 9808 KB Output is correct
11 Correct 1176 ms 9872 KB Output is correct
12 Correct 1167 ms 9224 KB Output is correct
13 Correct 1446 ms 9144 KB Output is correct
14 Correct 1209 ms 7960 KB Output is correct
15 Correct 627 ms 4728 KB Output is correct
16 Correct 1243 ms 8092 KB Output is correct
17 Correct 1086 ms 8056 KB Output is correct
18 Correct 44 ms 3448 KB Output is correct
19 Correct 1010 ms 8056 KB Output is correct
20 Correct 1138 ms 7928 KB Output is correct
21 Correct 987 ms 7928 KB Output is correct
22 Correct 572 ms 7544 KB Output is correct
23 Correct 551 ms 7416 KB Output is correct
24 Correct 783 ms 7800 KB Output is correct
25 Correct 904 ms 8056 KB Output is correct
26 Correct 1600 ms 10016 KB Output is correct
27 Correct 1672 ms 10144 KB Output is correct
28 Correct 1711 ms 10096 KB Output is correct
29 Correct 1339 ms 10104 KB Output is correct
30 Correct 1766 ms 10168 KB Output is correct
31 Correct 2021 ms 10028 KB Output is correct
32 Correct 2101 ms 9988 KB Output is correct
33 Correct 2061 ms 10068 KB Output is correct
34 Correct 1736 ms 10008 KB Output is correct
35 Correct 1994 ms 10140 KB Output is correct
36 Correct 1593 ms 9920 KB Output is correct
37 Correct 1345 ms 10012 KB Output is correct
38 Correct 1371 ms 10036 KB Output is correct
39 Correct 817 ms 9336 KB Output is correct
40 Correct 755 ms 9360 KB Output is correct
41 Correct 1016 ms 9464 KB Output is correct
42 Correct 1160 ms 10148 KB Output is correct
43 Correct 1124 ms 10036 KB Output is correct
44 Correct 1253 ms 10128 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 4 ms 2688 KB Output is correct
2 Correct 4 ms 2816 KB Output is correct
3 Correct 25 ms 3064 KB Output is correct
4 Correct 8 ms 2816 KB Output is correct
5 Correct 22 ms 2944 KB Output is correct
6 Correct 20 ms 2944 KB Output is correct
7 Correct 22 ms 2816 KB Output is correct
8 Correct 22 ms 3072 KB Output is correct
9 Correct 24 ms 2816 KB Output is correct
10 Correct 20 ms 2944 KB Output is correct
11 Correct 20 ms 2944 KB Output is correct
12 Correct 21 ms 2944 KB Output is correct
13 Correct 26 ms 3064 KB Output is correct
14 Correct 23 ms 2944 KB Output is correct
15 Correct 24 ms 2944 KB Output is correct
16 Correct 22 ms 2816 KB Output is correct
17 Correct 22 ms 2816 KB Output is correct
18 Correct 1561 ms 10156 KB Output is correct
19 Correct 1327 ms 10104 KB Output is correct
20 Correct 1519 ms 10024 KB Output is correct
21 Correct 1322 ms 9852 KB Output is correct
22 Correct 1382 ms 10068 KB Output is correct
23 Correct 1743 ms 9252 KB Output is correct
24 Correct 1529 ms 9208 KB Output is correct
25 Correct 1604 ms 9272 KB Output is correct
26 Correct 44 ms 3448 KB Output is correct
27 Correct 1136 ms 9808 KB Output is correct
28 Correct 1176 ms 9872 KB Output is correct
29 Correct 1167 ms 9224 KB Output is correct
30 Correct 1446 ms 9144 KB Output is correct
31 Correct 1209 ms 7960 KB Output is correct
32 Correct 627 ms 4728 KB Output is correct
33 Correct 1243 ms 8092 KB Output is correct
34 Correct 1086 ms 8056 KB Output is correct
35 Correct 44 ms 3448 KB Output is correct
36 Correct 1010 ms 8056 KB Output is correct
37 Correct 1138 ms 7928 KB Output is correct
38 Correct 987 ms 7928 KB Output is correct
39 Correct 572 ms 7544 KB Output is correct
40 Correct 551 ms 7416 KB Output is correct
41 Correct 783 ms 7800 KB Output is correct
42 Correct 904 ms 8056 KB Output is correct
43 Correct 2547 ms 13764 KB Output is correct
44 Correct 44 ms 3704 KB Output is correct
45 Correct 305 ms 12412 KB Output is correct
46 Correct 134 ms 12536 KB Output is correct
47 Correct 1771 ms 14000 KB Output is correct
48 Correct 2698 ms 13956 KB Output is correct
49 Correct 1523 ms 13824 KB Output is correct
50 Correct 648 ms 9080 KB Output is correct
51 Correct 692 ms 8888 KB Output is correct
52 Correct 711 ms 9080 KB Output is correct
53 Correct 1804 ms 11312 KB Output is correct
54 Correct 1491 ms 11328 KB Output is correct
55 Correct 1678 ms 11608 KB Output is correct
56 Correct 1201 ms 14024 KB Output is correct
57 Correct 941 ms 13944 KB Output is correct
58 Correct 2413 ms 13688 KB Output is correct
59 Correct 2211 ms 13712 KB Output is correct
60 Execution timed out 3039 ms 13708 KB Time limit exceeded
61 Halted 0 ms 0 KB -