Submission #208192

# Submission time Handle Problem Language Result Execution time Memory
208192 2020-03-10T08:31:04 Z Segtree Bridges (APIO19_bridges) C++14
100 / 100
2937 ms 16472 KB
#include<iostream>
#include<algorithm>
#include<vector>
#include<queue>
#include<stack>
#include<set>
#include<unordered_set>
using namespace std;
typedef long long ll;
typedef pair<ll,ll> P;
#define rep(i,n) for(int i=0;i<n;i++)
#define chmin(a,b) a=min(a,b)
#define chmax(a,b) a=max(a,b)
#define all(x) x.begin(),x.end()
#define B 800
#define N 50010
#define M 100010
namespace uf{
	ll dat[N];
	stack<P> s;
	void init(){
		rep(i,N)dat[i]=-1;
		while(!s.empty())s.pop();
	}
	void confirm(){
		while(!s.empty())s.pop();
	}
	ll find(ll x){
		return (dat[x]<0?x:find(dat[x]));
	}
	ll siz(ll x){
		return -dat[find(x)];
	}
	void unite(ll a,ll b){
		a=find(a),b=find(b);
		if(a==b)return;
		if(-dat[a]<-dat[b])swap(a,b);
		s.push(make_pair(a,dat[a]));
		s.push(make_pair(b,dat[b]));
		dat[a]+=dat[b];
		dat[b]=a;
	}
	void rollback(){
		while(!s.empty()){
			dat[s.top().first]=s.top().second;
			s.pop();
		}
	}
};
typedef struct qry{
	ll s,w,id;
	bool operator<(const qry&key)const{
		return this->w>key.w;
	}
}qry;//t=2のクエリの構造体
int n,m,q;
int a[M],b[M],c[M];
int t[M],x[M],y[M];
int fans[M];
ll cc[B+1][B];
bool used[N];

int main(){
	cin>>n>>m;
	for(int i=1;i<=m;i++){
		cin>>a[i]>>b[i]>>c[i];
	}
	cin>>q;
	rep(i,q){
		cin>>t[i]>>x[i]>>y[i];
	}
	for(int L=0;L<q;L+=B){
		int R=min(q,L+B);
		for(int i=1;i<=m;i++)used[i]=0;
		for(int i=L;i<R;i++){
			if(t[i]==1)used[x[i]]=1;
		}
		vector<ll> S;//このクエリバケット内で変更がある辺のid
		vector<P> E;//変更のない辺{コスト,id}、降順にuniteしていく
		for(int i=1;i<=m;i++){
			if(used[i])S.push_back(i);
			else E.push_back(make_pair(c[i],i));
		}
		sort(all(E));
		vector<qry> Q;//バケット内のクエリ、wの降順に答えていく
		for(int i=L;i<R;i++){
			if(t[i]==2){
				Q.push_back((qry){x[i],y[i],i});
			}
		}
		sort(all(Q));
		uf::init();
		//cc[i][j]:=辺S[j]のクエリL+iの直前のコスト
		for(int i=0;i<S.size();i++){
			cc[0][i]=c[S[i]];
		}
		for(int i=L;i<R;i++){
			rep(j,S.size())cc[i-L+1][j]=cc[i-L][j];
			if(t[i]==1){
				cc[i-L+1][lower_bound(all(S),x[i])-S.begin()]=y[i];
			}
		}
		for(auto qs:Q){
			while(E.size()>0&&E.back().first>=qs.w){
				ll id=E.back().second;
				uf::unite(a[id],b[id]);
				E.pop_back();
			}
			uf::confirm();
			for(int i=0;i<S.size();i++){
				if(cc[qs.id-L][i]>=qs.w){
					uf::unite(a[S[i]],b[S[i]]);
				}
			}
			fans[qs.id]=uf::siz(qs.s);
			uf::rollback();
		}
		for(int i=L;i<R;i++){
			if(t[i]==1)c[x[i]]=y[i];
		}
	}
	for(int i=0;i<q;i++)if(t[i]==2)cout<<fans[i]<<"\n";
}

Compilation message

bridges.cpp: In function 'int main()':
bridges.cpp:94:16: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
   for(int i=0;i<S.size();i++){
               ~^~~~~~~~~
bridges.cpp:11:31: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
 #define rep(i,n) for(int i=0;i<n;i++)
bridges.cpp:98:8:
    rep(j,S.size())cc[i-L+1][j]=cc[i-L][j];
        ~~~~~~~~~~              
bridges.cpp:98:4: note: in expansion of macro 'rep'
    rep(j,S.size())cc[i-L+1][j]=cc[i-L][j];
    ^~~
bridges.cpp:110:17: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
    for(int i=0;i<S.size();i++){
                ~^~~~~~~~~
# Verdict Execution time Memory Grader output
1 Correct 5 ms 760 KB Output is correct
2 Correct 5 ms 760 KB Output is correct
3 Correct 42 ms 6008 KB Output is correct
4 Correct 17 ms 1016 KB Output is correct
5 Correct 25 ms 4856 KB Output is correct
6 Correct 24 ms 4856 KB Output is correct
7 Correct 26 ms 4856 KB Output is correct
8 Correct 29 ms 4856 KB Output is correct
9 Correct 30 ms 4856 KB Output is correct
10 Correct 30 ms 4856 KB Output is correct
11 Correct 29 ms 4856 KB Output is correct
12 Correct 32 ms 4856 KB Output is correct
13 Correct 37 ms 5112 KB Output is correct
14 Correct 33 ms 5112 KB Output is correct
15 Correct 30 ms 4892 KB Output is correct
16 Correct 27 ms 4856 KB Output is correct
17 Correct 28 ms 4856 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 1738 ms 10076 KB Output is correct
2 Correct 1738 ms 12656 KB Output is correct
3 Correct 1743 ms 12720 KB Output is correct
4 Correct 1752 ms 12756 KB Output is correct
5 Correct 1745 ms 12976 KB Output is correct
6 Correct 2192 ms 13288 KB Output is correct
7 Correct 2213 ms 13304 KB Output is correct
8 Correct 2178 ms 13516 KB Output is correct
9 Correct 127 ms 3832 KB Output is correct
10 Correct 1550 ms 12004 KB Output is correct
11 Correct 1543 ms 11860 KB Output is correct
12 Correct 1454 ms 12356 KB Output is correct
13 Correct 1534 ms 13404 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 1291 ms 8892 KB Output is correct
2 Correct 862 ms 9364 KB Output is correct
3 Correct 1482 ms 11124 KB Output is correct
4 Correct 1276 ms 11432 KB Output is correct
5 Correct 128 ms 3964 KB Output is correct
6 Correct 1375 ms 11380 KB Output is correct
7 Correct 1168 ms 11236 KB Output is correct
8 Correct 1129 ms 11280 KB Output is correct
9 Correct 963 ms 10348 KB Output is correct
10 Correct 898 ms 10212 KB Output is correct
11 Correct 1006 ms 11372 KB Output is correct
12 Correct 1000 ms 11224 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 2378 ms 7580 KB Output is correct
2 Correct 126 ms 2552 KB Output is correct
3 Correct 324 ms 5808 KB Output is correct
4 Correct 286 ms 5812 KB Output is correct
5 Correct 2054 ms 8312 KB Output is correct
6 Correct 2353 ms 7732 KB Output is correct
7 Correct 2058 ms 8388 KB Output is correct
8 Correct 1216 ms 5108 KB Output is correct
9 Correct 1190 ms 4976 KB Output is correct
10 Correct 1124 ms 5940 KB Output is correct
11 Correct 1864 ms 6796 KB Output is correct
12 Correct 1828 ms 6808 KB Output is correct
13 Correct 1688 ms 7644 KB Output is correct
14 Correct 1788 ms 8248 KB Output is correct
15 Correct 1963 ms 8460 KB Output is correct
16 Correct 2387 ms 7280 KB Output is correct
17 Correct 2403 ms 7536 KB Output is correct
18 Correct 2388 ms 7480 KB Output is correct
19 Correct 2358 ms 7388 KB Output is correct
20 Correct 1870 ms 7996 KB Output is correct
21 Correct 1899 ms 7996 KB Output is correct
22 Correct 2110 ms 8452 KB Output is correct
23 Correct 1955 ms 7824 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 1738 ms 10076 KB Output is correct
2 Correct 1738 ms 12656 KB Output is correct
3 Correct 1743 ms 12720 KB Output is correct
4 Correct 1752 ms 12756 KB Output is correct
5 Correct 1745 ms 12976 KB Output is correct
6 Correct 2192 ms 13288 KB Output is correct
7 Correct 2213 ms 13304 KB Output is correct
8 Correct 2178 ms 13516 KB Output is correct
9 Correct 127 ms 3832 KB Output is correct
10 Correct 1550 ms 12004 KB Output is correct
11 Correct 1543 ms 11860 KB Output is correct
12 Correct 1454 ms 12356 KB Output is correct
13 Correct 1534 ms 13404 KB Output is correct
14 Correct 1291 ms 8892 KB Output is correct
15 Correct 862 ms 9364 KB Output is correct
16 Correct 1482 ms 11124 KB Output is correct
17 Correct 1276 ms 11432 KB Output is correct
18 Correct 128 ms 3964 KB Output is correct
19 Correct 1375 ms 11380 KB Output is correct
20 Correct 1168 ms 11236 KB Output is correct
21 Correct 1129 ms 11280 KB Output is correct
22 Correct 963 ms 10348 KB Output is correct
23 Correct 898 ms 10212 KB Output is correct
24 Correct 1006 ms 11372 KB Output is correct
25 Correct 1000 ms 11224 KB Output is correct
26 Correct 1830 ms 12792 KB Output is correct
27 Correct 2146 ms 12604 KB Output is correct
28 Correct 1854 ms 12932 KB Output is correct
29 Correct 1469 ms 12624 KB Output is correct
30 Correct 2005 ms 12548 KB Output is correct
31 Correct 2019 ms 12504 KB Output is correct
32 Correct 2105 ms 12632 KB Output is correct
33 Correct 1796 ms 12816 KB Output is correct
34 Correct 1801 ms 12780 KB Output is correct
35 Correct 1827 ms 12812 KB Output is correct
36 Correct 1513 ms 12688 KB Output is correct
37 Correct 1420 ms 12756 KB Output is correct
38 Correct 1430 ms 12932 KB Output is correct
39 Correct 1310 ms 11440 KB Output is correct
40 Correct 1316 ms 11476 KB Output is correct
41 Correct 1306 ms 11600 KB Output is correct
42 Correct 1308 ms 12756 KB Output is correct
43 Correct 1309 ms 12916 KB Output is correct
44 Correct 1307 ms 12872 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 5 ms 760 KB Output is correct
2 Correct 5 ms 760 KB Output is correct
3 Correct 42 ms 6008 KB Output is correct
4 Correct 17 ms 1016 KB Output is correct
5 Correct 25 ms 4856 KB Output is correct
6 Correct 24 ms 4856 KB Output is correct
7 Correct 26 ms 4856 KB Output is correct
8 Correct 29 ms 4856 KB Output is correct
9 Correct 30 ms 4856 KB Output is correct
10 Correct 30 ms 4856 KB Output is correct
11 Correct 29 ms 4856 KB Output is correct
12 Correct 32 ms 4856 KB Output is correct
13 Correct 37 ms 5112 KB Output is correct
14 Correct 33 ms 5112 KB Output is correct
15 Correct 30 ms 4892 KB Output is correct
16 Correct 27 ms 4856 KB Output is correct
17 Correct 28 ms 4856 KB Output is correct
18 Correct 1738 ms 10076 KB Output is correct
19 Correct 1738 ms 12656 KB Output is correct
20 Correct 1743 ms 12720 KB Output is correct
21 Correct 1752 ms 12756 KB Output is correct
22 Correct 1745 ms 12976 KB Output is correct
23 Correct 2192 ms 13288 KB Output is correct
24 Correct 2213 ms 13304 KB Output is correct
25 Correct 2178 ms 13516 KB Output is correct
26 Correct 127 ms 3832 KB Output is correct
27 Correct 1550 ms 12004 KB Output is correct
28 Correct 1543 ms 11860 KB Output is correct
29 Correct 1454 ms 12356 KB Output is correct
30 Correct 1534 ms 13404 KB Output is correct
31 Correct 1291 ms 8892 KB Output is correct
32 Correct 862 ms 9364 KB Output is correct
33 Correct 1482 ms 11124 KB Output is correct
34 Correct 1276 ms 11432 KB Output is correct
35 Correct 128 ms 3964 KB Output is correct
36 Correct 1375 ms 11380 KB Output is correct
37 Correct 1168 ms 11236 KB Output is correct
38 Correct 1129 ms 11280 KB Output is correct
39 Correct 963 ms 10348 KB Output is correct
40 Correct 898 ms 10212 KB Output is correct
41 Correct 1006 ms 11372 KB Output is correct
42 Correct 1000 ms 11224 KB Output is correct
43 Correct 2378 ms 7580 KB Output is correct
44 Correct 126 ms 2552 KB Output is correct
45 Correct 324 ms 5808 KB Output is correct
46 Correct 286 ms 5812 KB Output is correct
47 Correct 2054 ms 8312 KB Output is correct
48 Correct 2353 ms 7732 KB Output is correct
49 Correct 2058 ms 8388 KB Output is correct
50 Correct 1216 ms 5108 KB Output is correct
51 Correct 1190 ms 4976 KB Output is correct
52 Correct 1124 ms 5940 KB Output is correct
53 Correct 1864 ms 6796 KB Output is correct
54 Correct 1828 ms 6808 KB Output is correct
55 Correct 1688 ms 7644 KB Output is correct
56 Correct 1788 ms 8248 KB Output is correct
57 Correct 1963 ms 8460 KB Output is correct
58 Correct 2387 ms 7280 KB Output is correct
59 Correct 2403 ms 7536 KB Output is correct
60 Correct 2388 ms 7480 KB Output is correct
61 Correct 2358 ms 7388 KB Output is correct
62 Correct 1870 ms 7996 KB Output is correct
63 Correct 1899 ms 7996 KB Output is correct
64 Correct 2110 ms 8452 KB Output is correct
65 Correct 1955 ms 7824 KB Output is correct
66 Correct 1830 ms 12792 KB Output is correct
67 Correct 2146 ms 12604 KB Output is correct
68 Correct 1854 ms 12932 KB Output is correct
69 Correct 1469 ms 12624 KB Output is correct
70 Correct 2005 ms 12548 KB Output is correct
71 Correct 2019 ms 12504 KB Output is correct
72 Correct 2105 ms 12632 KB Output is correct
73 Correct 1796 ms 12816 KB Output is correct
74 Correct 1801 ms 12780 KB Output is correct
75 Correct 1827 ms 12812 KB Output is correct
76 Correct 1513 ms 12688 KB Output is correct
77 Correct 1420 ms 12756 KB Output is correct
78 Correct 1430 ms 12932 KB Output is correct
79 Correct 1310 ms 11440 KB Output is correct
80 Correct 1316 ms 11476 KB Output is correct
81 Correct 1306 ms 11600 KB Output is correct
82 Correct 1308 ms 12756 KB Output is correct
83 Correct 1309 ms 12916 KB Output is correct
84 Correct 1307 ms 12872 KB Output is correct
85 Correct 2937 ms 16024 KB Output is correct
86 Correct 387 ms 12912 KB Output is correct
87 Correct 334 ms 12760 KB Output is correct
88 Correct 2608 ms 14912 KB Output is correct
89 Correct 2927 ms 16092 KB Output is correct
90 Correct 2534 ms 15320 KB Output is correct
91 Correct 1853 ms 12808 KB Output is correct
92 Correct 1850 ms 12764 KB Output is correct
93 Correct 2327 ms 13624 KB Output is correct
94 Correct 2353 ms 14984 KB Output is correct
95 Correct 2358 ms 15144 KB Output is correct
96 Correct 2407 ms 15468 KB Output is correct
97 Correct 2211 ms 14136 KB Output is correct
98 Correct 2402 ms 15172 KB Output is correct
99 Correct 2820 ms 16240 KB Output is correct
100 Correct 2822 ms 16032 KB Output is correct
101 Correct 2875 ms 16144 KB Output is correct
102 Correct 2860 ms 16352 KB Output is correct
103 Correct 2642 ms 15896 KB Output is correct
104 Correct 2646 ms 16064 KB Output is correct
105 Correct 2230 ms 15688 KB Output is correct
106 Correct 1957 ms 15308 KB Output is correct
107 Correct 2111 ms 14908 KB Output is correct
108 Correct 2605 ms 16472 KB Output is correct
109 Correct 2391 ms 14452 KB Output is correct