답안 #411977

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
411977 2021-05-26T11:23:55 Z amirmohammad_nezami 다리 (APIO19_bridges) C++14
100 / 100
2668 ms 44640 KB
//                                                           In the name of God 
//                                           We are everywhere while we are nowhere(Haj NEZAM...)
#include <bits/stdc++.h>
using namespace std;

#define F first
#define S second
#define lc 2 * v
#define rc 2 * v + 1
#define PB push_back
#define MP make_pair
#define ll long long
// #define int long long
#define ld long double
#define mid (s + e) / 2
#define pii pair <int , int>
#define _sz(e) (int)e.size()
#define _all(e) e.begin() , e.end()
#define pll pair <long long , long long>
#define piii pair <int , pair <int , int> >
#define FAST ios::sync_with_stdio(0);cin.tie(0)
#define UNI(e) e.resize(unique(_all(e)) - e.begin())

#define kill(e) cout << e << '\n'

#pragma GCC optimize ("O3")
#pragma GCC optimize ("unroll-loops")

const int maxn = 5e4 + 5 , N = 1e5 + 5 , SQ = 1000 , base = 800287 , mod = 1e9 + 7 , INF = 1e9 + 5 , lg = 20;
const ld eps = 1e-4;

struct edges {
	int v , u , w;
};

struct query {
	int type , x , y;
};

edges e[N];
query q[N];
bool mark[N];
vector <int> temp[SQ] , dsu;
int n , m , t , res[N] , sz[maxn] , par[maxn];

inline bool cmp1(int a , int b) {
	return q[a].y > q[b].y;
}
inline bool cmp2(int a , int b) {
	return e[a].w > e[b].w;
}

inline void reset() {
	fill(sz , sz + n , 1);
	iota(par , par + n , 0);
	fill(mark , mark + m , 0);
}

int root(int v) {
	return (par[v] == v ? v : root(par[v]));
}

inline void merge(int v , int u) {
	if((v = root(v)) == (u = root(u))) {
		return ;
	}
	if(sz[u] > sz[v]) {	
		swap(v , u);
	}
	dsu.PB(u);
	sz[v] += sz[u] , par[u] = par[v];
}

int32_t main() {
	FAST;
	cin >> n >> m;
	for (int i = 0; i < m; ++i) {
		cin >> e[i].v >> e[i].u >> e[i].w;
		e[i].v-- , e[i].u--;
	}
	cin >> t;
	for (int i = 0; i < t; ++i) {
		cin >> q[i].type >> q[i].x >> q[i].y;
		q[i].x--;
	}

	for (int l = 0; l < t; ) {
		reset();
		int r = min(t , l + SQ);	
		vector <int> ask , fix , changed;

		for (int i = l; i < r; ++i) {
			if(q[i].type == 1) {
				mark[q[i].x] = 1;
				changed.PB(q[i].x);
			}
			else {
				ask.PB(i);
			}
		}
		for (int i = 0; i < m; ++i) {
			if(!mark[i]) {
				fix.PB(i);
			}
		}
		for (int i = l; i < r; ++i) {
			if(q[i].type == 1) {
				e[q[i].x].w = q[i].y;
			} 
			else {
				temp[i - l].clear();
				for (auto yal : changed) {
					if(e[yal].w >= q[i].y) {
						temp[i - l].PB(yal);
					}
				}
			}
		}
		
		int id = 0;
		sort(_all(ask) , cmp1);
		sort(_all(fix) , cmp2);
		for (auto c : ask) {
			while(id < _sz(fix) && e[fix[id]].w >= q[c].y) {
				merge(e[fix[id]].u , e[fix[id]].v); id++;
			}
			int pre_sz = _sz(dsu);
			for (auto yal : temp[c - l]) {
				merge(e[yal].u , e[yal].v);
			}
			res[c] = sz[root(q[c].x)];
			while(_sz(dsu) > pre_sz) {
				int v = dsu.back();
				sz[par[v]] -= sz[v];
				par[v] = v;
				dsu.pop_back();
			}
		}
		
		l = r;
	}

	for (int i = 0; i < t; ++i) {
		if(q[i].type == 2) {
			cout << res[i] << '\n';
		}
	}
}
 // Mistakes:
//  * Read the problem carefully.
//  * Check maxn.
//  * Overflows.
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 332 KB Output is correct
2 Correct 1 ms 332 KB Output is correct
3 Correct 34 ms 2836 KB Output is correct
4 Correct 7 ms 564 KB Output is correct
5 Correct 35 ms 2972 KB Output is correct
6 Correct 30 ms 2732 KB Output is correct
7 Correct 33 ms 3532 KB Output is correct
8 Correct 38 ms 2708 KB Output is correct
9 Correct 46 ms 4316 KB Output is correct
10 Correct 44 ms 2872 KB Output is correct
11 Correct 45 ms 2788 KB Output is correct
12 Correct 52 ms 2960 KB Output is correct
13 Correct 52 ms 2780 KB Output is correct
14 Correct 42 ms 2792 KB Output is correct
15 Correct 49 ms 2836 KB Output is correct
16 Correct 37 ms 3916 KB Output is correct
17 Correct 43 ms 3476 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1730 ms 39044 KB Output is correct
2 Correct 1710 ms 39192 KB Output is correct
3 Correct 1772 ms 39080 KB Output is correct
4 Correct 1733 ms 38980 KB Output is correct
5 Correct 1738 ms 39244 KB Output is correct
6 Correct 2390 ms 40604 KB Output is correct
7 Correct 2372 ms 40612 KB Output is correct
8 Correct 2369 ms 40604 KB Output is correct
9 Correct 45 ms 2116 KB Output is correct
10 Correct 1326 ms 40876 KB Output is correct
11 Correct 1241 ms 40556 KB Output is correct
12 Correct 1530 ms 36856 KB Output is correct
13 Correct 1524 ms 40360 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1287 ms 21864 KB Output is correct
2 Correct 870 ms 10604 KB Output is correct
3 Correct 1440 ms 23520 KB Output is correct
4 Correct 1254 ms 22060 KB Output is correct
5 Correct 45 ms 2244 KB Output is correct
6 Correct 1393 ms 21992 KB Output is correct
7 Correct 1167 ms 21556 KB Output is correct
8 Correct 1020 ms 21528 KB Output is correct
9 Correct 874 ms 19816 KB Output is correct
10 Correct 810 ms 19884 KB Output is correct
11 Correct 946 ms 23428 KB Output is correct
12 Correct 856 ms 23336 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 2130 ms 37404 KB Output is correct
2 Correct 45 ms 2200 KB Output is correct
3 Correct 220 ms 2820 KB Output is correct
4 Correct 112 ms 2808 KB Output is correct
5 Correct 1093 ms 37388 KB Output is correct
6 Correct 2121 ms 37380 KB Output is correct
7 Correct 1110 ms 37304 KB Output is correct
8 Correct 1048 ms 36232 KB Output is correct
9 Correct 1030 ms 36328 KB Output is correct
10 Correct 1044 ms 36240 KB Output is correct
11 Correct 1604 ms 36976 KB Output is correct
12 Correct 1657 ms 36924 KB Output is correct
13 Correct 1647 ms 36952 KB Output is correct
14 Correct 988 ms 37384 KB Output is correct
15 Correct 1054 ms 37332 KB Output is correct
16 Correct 2167 ms 37512 KB Output is correct
17 Correct 2205 ms 37368 KB Output is correct
18 Correct 2184 ms 37312 KB Output is correct
19 Correct 2187 ms 37312 KB Output is correct
20 Correct 1814 ms 37200 KB Output is correct
21 Correct 1818 ms 37120 KB Output is correct
22 Correct 2048 ms 37316 KB Output is correct
23 Correct 1196 ms 37200 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1730 ms 39044 KB Output is correct
2 Correct 1710 ms 39192 KB Output is correct
3 Correct 1772 ms 39080 KB Output is correct
4 Correct 1733 ms 38980 KB Output is correct
5 Correct 1738 ms 39244 KB Output is correct
6 Correct 2390 ms 40604 KB Output is correct
7 Correct 2372 ms 40612 KB Output is correct
8 Correct 2369 ms 40604 KB Output is correct
9 Correct 45 ms 2116 KB Output is correct
10 Correct 1326 ms 40876 KB Output is correct
11 Correct 1241 ms 40556 KB Output is correct
12 Correct 1530 ms 36856 KB Output is correct
13 Correct 1524 ms 40360 KB Output is correct
14 Correct 1287 ms 21864 KB Output is correct
15 Correct 870 ms 10604 KB Output is correct
16 Correct 1440 ms 23520 KB Output is correct
17 Correct 1254 ms 22060 KB Output is correct
18 Correct 45 ms 2244 KB Output is correct
19 Correct 1393 ms 21992 KB Output is correct
20 Correct 1167 ms 21556 KB Output is correct
21 Correct 1020 ms 21528 KB Output is correct
22 Correct 874 ms 19816 KB Output is correct
23 Correct 810 ms 19884 KB Output is correct
24 Correct 946 ms 23428 KB Output is correct
25 Correct 856 ms 23336 KB Output is correct
26 Correct 1735 ms 39132 KB Output is correct
27 Correct 2055 ms 40648 KB Output is correct
28 Correct 1719 ms 38960 KB Output is correct
29 Correct 1337 ms 38680 KB Output is correct
30 Correct 1983 ms 40688 KB Output is correct
31 Correct 1996 ms 40540 KB Output is correct
32 Correct 1991 ms 40648 KB Output is correct
33 Correct 1721 ms 38924 KB Output is correct
34 Correct 1725 ms 38876 KB Output is correct
35 Correct 1717 ms 38940 KB Output is correct
36 Correct 1377 ms 38640 KB Output is correct
37 Correct 1351 ms 38636 KB Output is correct
38 Correct 1464 ms 38656 KB Output is correct
39 Correct 1189 ms 36836 KB Output is correct
40 Correct 1164 ms 36860 KB Output is correct
41 Correct 1168 ms 37016 KB Output is correct
42 Correct 1172 ms 39976 KB Output is correct
43 Correct 1155 ms 39864 KB Output is correct
44 Correct 1156 ms 39768 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 332 KB Output is correct
2 Correct 1 ms 332 KB Output is correct
3 Correct 34 ms 2836 KB Output is correct
4 Correct 7 ms 564 KB Output is correct
5 Correct 35 ms 2972 KB Output is correct
6 Correct 30 ms 2732 KB Output is correct
7 Correct 33 ms 3532 KB Output is correct
8 Correct 38 ms 2708 KB Output is correct
9 Correct 46 ms 4316 KB Output is correct
10 Correct 44 ms 2872 KB Output is correct
11 Correct 45 ms 2788 KB Output is correct
12 Correct 52 ms 2960 KB Output is correct
13 Correct 52 ms 2780 KB Output is correct
14 Correct 42 ms 2792 KB Output is correct
15 Correct 49 ms 2836 KB Output is correct
16 Correct 37 ms 3916 KB Output is correct
17 Correct 43 ms 3476 KB Output is correct
18 Correct 1730 ms 39044 KB Output is correct
19 Correct 1710 ms 39192 KB Output is correct
20 Correct 1772 ms 39080 KB Output is correct
21 Correct 1733 ms 38980 KB Output is correct
22 Correct 1738 ms 39244 KB Output is correct
23 Correct 2390 ms 40604 KB Output is correct
24 Correct 2372 ms 40612 KB Output is correct
25 Correct 2369 ms 40604 KB Output is correct
26 Correct 45 ms 2116 KB Output is correct
27 Correct 1326 ms 40876 KB Output is correct
28 Correct 1241 ms 40556 KB Output is correct
29 Correct 1530 ms 36856 KB Output is correct
30 Correct 1524 ms 40360 KB Output is correct
31 Correct 1287 ms 21864 KB Output is correct
32 Correct 870 ms 10604 KB Output is correct
33 Correct 1440 ms 23520 KB Output is correct
34 Correct 1254 ms 22060 KB Output is correct
35 Correct 45 ms 2244 KB Output is correct
36 Correct 1393 ms 21992 KB Output is correct
37 Correct 1167 ms 21556 KB Output is correct
38 Correct 1020 ms 21528 KB Output is correct
39 Correct 874 ms 19816 KB Output is correct
40 Correct 810 ms 19884 KB Output is correct
41 Correct 946 ms 23428 KB Output is correct
42 Correct 856 ms 23336 KB Output is correct
43 Correct 2130 ms 37404 KB Output is correct
44 Correct 45 ms 2200 KB Output is correct
45 Correct 220 ms 2820 KB Output is correct
46 Correct 112 ms 2808 KB Output is correct
47 Correct 1093 ms 37388 KB Output is correct
48 Correct 2121 ms 37380 KB Output is correct
49 Correct 1110 ms 37304 KB Output is correct
50 Correct 1048 ms 36232 KB Output is correct
51 Correct 1030 ms 36328 KB Output is correct
52 Correct 1044 ms 36240 KB Output is correct
53 Correct 1604 ms 36976 KB Output is correct
54 Correct 1657 ms 36924 KB Output is correct
55 Correct 1647 ms 36952 KB Output is correct
56 Correct 988 ms 37384 KB Output is correct
57 Correct 1054 ms 37332 KB Output is correct
58 Correct 2167 ms 37512 KB Output is correct
59 Correct 2205 ms 37368 KB Output is correct
60 Correct 2184 ms 37312 KB Output is correct
61 Correct 2187 ms 37312 KB Output is correct
62 Correct 1814 ms 37200 KB Output is correct
63 Correct 1818 ms 37120 KB Output is correct
64 Correct 2048 ms 37316 KB Output is correct
65 Correct 1196 ms 37200 KB Output is correct
66 Correct 1735 ms 39132 KB Output is correct
67 Correct 2055 ms 40648 KB Output is correct
68 Correct 1719 ms 38960 KB Output is correct
69 Correct 1337 ms 38680 KB Output is correct
70 Correct 1983 ms 40688 KB Output is correct
71 Correct 1996 ms 40540 KB Output is correct
72 Correct 1991 ms 40648 KB Output is correct
73 Correct 1721 ms 38924 KB Output is correct
74 Correct 1725 ms 38876 KB Output is correct
75 Correct 1717 ms 38940 KB Output is correct
76 Correct 1377 ms 38640 KB Output is correct
77 Correct 1351 ms 38636 KB Output is correct
78 Correct 1464 ms 38656 KB Output is correct
79 Correct 1189 ms 36836 KB Output is correct
80 Correct 1164 ms 36860 KB Output is correct
81 Correct 1168 ms 37016 KB Output is correct
82 Correct 1172 ms 39976 KB Output is correct
83 Correct 1155 ms 39864 KB Output is correct
84 Correct 1156 ms 39768 KB Output is correct
85 Correct 2564 ms 39968 KB Output is correct
86 Correct 249 ms 4880 KB Output is correct
87 Correct 143 ms 6116 KB Output is correct
88 Correct 1494 ms 41744 KB Output is correct
89 Correct 2541 ms 40088 KB Output is correct
90 Correct 1520 ms 41768 KB Output is correct
91 Correct 1763 ms 39000 KB Output is correct
92 Correct 1764 ms 39076 KB Output is correct
93 Correct 2428 ms 40088 KB Output is correct
94 Correct 2143 ms 39820 KB Output is correct
95 Correct 2158 ms 39648 KB Output is correct
96 Correct 2418 ms 41216 KB Output is correct
97 Correct 1245 ms 38712 KB Output is correct
98 Correct 1289 ms 41852 KB Output is correct
99 Correct 2620 ms 40284 KB Output is correct
100 Correct 2577 ms 39768 KB Output is correct
101 Correct 2635 ms 40040 KB Output is correct
102 Correct 2625 ms 43824 KB Output is correct
103 Correct 2666 ms 44588 KB Output is correct
104 Correct 2668 ms 44640 KB Output is correct
105 Correct 2125 ms 44392 KB Output is correct
106 Correct 1745 ms 44268 KB Output is correct
107 Correct 2008 ms 41828 KB Output is correct
108 Correct 2599 ms 43952 KB Output is correct
109 Correct 1769 ms 43412 KB Output is correct