Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<bits/stdc++.h>
- using namespace std;
- struct A{
- int s,t,r,l;
- bool operator < (const A&o) const{
- return l<o.l;
- }
- }st[500010];
- pair<int ,int > rf[300010];
- int f[3010];
- int fr(int now){
- if(f[now] == now) return now;
- else return f[now] = fr(f[now]);
- }
- int main(){
- int i,p,b,e;
- scanf("%d %d",&b,&e);
- for(i=0;i<b;i++)
- f[i] = i;
- for(i=0;i<e;i++){
- scanf("%d %d %d %d",&st[i].s,&st[i].t,&st[i].l,&st[i].r);
- if(st[i].r == 1){
- int rs = fr(st[i].s);
- int rt = fr(st[i].t);
- f[rs] = rt;
- }
- }
- scanf("%d",&p);
- for(i=0;i<p;i++){
- scanf("%d %d",&rf[i].first,&rf[i].second);
- }
- sort(rf,rf+p);
- for(i=p-2;i>=0;i--){
- rf[i].second = min(rf[i].second,rf[i+1].second);
- }
- for(i=0;i<e;i++){
- st[i].l=rf[lower_bound(rf,rf+p,make_pair(st[i].l,0))-rf].second;
- }
- sort(st,st+e);
- long long ans = 0;
- for(i=0;i<e;i++){
- int rs = fr(st[i].s);
- int rt = fr(st[i].t);
- if(st[i].r == 1){
- f[rs] = rt;
- continue;
- }
- if(rs == rt) continue;
- // printf("%d %d %d %d\n",st[i].s,st[i].t,st[i].l,st[i].r);
- ans+=st[i].l;
- f[rs] = rt;
- }
- printf("%lld\n",ans);
- }
- /*
- 6 8
- 0 1 19 0
- 1 2 50 1
- 1 3 5 0
- 2 3 18 0
- 0 4 32 0
- 3 4 22 0
- 2 5 70 0
- 4 5 20 1
- 8
- 5 60
- 50 200
- 75 350
- 20 100
- 40 145
- 15 50
- 35 150
- 8 60
- */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement