Submission #130219

# Submission time Handle Problem Language Result Execution time Memory
130219 2019-07-14T09:48:02 Z combi1k1 Bridges (APIO19_bridges) C++14
0 / 100
3000 ms 14180 KB
#include<bits/stdc++.h>

using namespace std;

const int   N   = 1e5 + 5;
const int   B   = 350;

#define pb      push_back
#define all(x)  x.begin(),x.end()
#define sz(x)   x.size()
#define X       first
#define Y       second

typedef pair<int,int>   ii;
typedef pair<int,ii>    pii;
typedef vector<pii>     vi;

struct Edge {
	int x, y;
	int w, i;
	bool operator < (const Edge &a) const   {
        return  ii(w,i) > ii(a.w,a.i);
	}
};
struct Ques {
    int mas, ver, idx;
    bool operator < (const Ques& a) const   {
        return  mas > a.mas;
    }
};

bool uV[N], uE[N];

namespace DSU   {
    int p[N], s[N];
    int lead(int x) {
        return  p[x] == x ? x : p[x] = lead(p[x]);
    }
    int join(int x,int y)   {
        x = lead(x);
        y = lead(y);
        if (x == y) return  0;
        if (uV[y])  swap(x,y);
        p[y] = x;
        s[x] += s[y];
        return  1;
    }
};

set<Edge>   E;
int n, m;
int x[N], y[N], w[N];

void calc(vector<Ques>  qr) {
    iota(DSU::p + 1,DSU::p + 1 + n,1);
    fill(DSU::s + 1,DSU::s + 1 + n,1);
    vector<Ques>    sta;
    vector<int>     vx;
    vector<int>     ed;
    vector<vi>      mp(n + 1);
    for(Ques t : qr)    {
        if(!t.idx)  uE[t.ver] = 1,  uV[x[t.ver]] = uV[y[t.ver]] = 1;
        else        sta.pb(t),      uV[t.ver] = 1;
    }
    for(int i = 1 ; i <= n ; ++i)   if (uV[i])  vx.pb(i);
    for(int i = 1 ; i <= m ; ++i)   if (uE[i])  ed.pb(i);
    sort(all(sta));
    auto it = E.begin();
    for(Ques t : sta)   {
        while (it != E.end() && (*it).w >= t.mas)   {
            if(!uE[(*it).i])    DSU::join((*it).x,(*it).y);
            it++;
        }
        for(int x : vx) mp[t.idx].pb(pii(x,{DSU::lead(x),DSU::s[DSU::p[x]]}));
    }
    for(Ques q : qr)    {
        if(!q.idx)  {
            Edge it = *E.find({x[q.ver],y[q.ver],w[q.ver],q.ver});
            E.erase(it);    it.w = w[q.ver] = q.mas;
            E.insert(it);   continue;
        }
        for(pii t : mp[q.idx])  DSU::p[t.X] = t.Y.X, DSU::s[t.X] = t.Y.Y;
        for(int i : ed) if (w[i] >= q.mas)
            DSU::join(x[i],y[i]);
        cout << DSU::s[DSU::lead(q.ver)] << "\n";
    }
    for(int i : vx) uV[i] = 0;
    for(int i : ed) uE[i] = 0;
}

int main()  {
    ios_base::sync_with_stdio(0);
    cin.tie(0); cout.tie(0);

    cin >> n >> m;

    for(int i = 1 ; i <= m ; ++i)    {
        cin >> x[i] >> y[i] >> w[i];
        E.insert({x[i],y[i],w[i],i});
    }

    int q;  cin >> q;

    vector<Ques>    v;

    for(int i = 1 ; i <= q ; ++i)   {
        int t, x, y;
        cin >> t >> x >> y;
        if (t == 1) v.pb({y,x,0});
        if (t == 2) v.pb({y,x,i});
    }

    for(int i = 0 ; i < q ; i += B)
        calc(vector<Ques>(v.begin() + i,v.begin() + min((int)v.size(),i + B)));
}
# Verdict Execution time Memory Grader output
1 Runtime error 3 ms 632 KB Execution killed with signal 11 (could be triggered by violating memory limits)
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Runtime error 1512 ms 14180 KB Execution killed with signal 11 (could be triggered by violating memory limits)
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Runtime error 675 ms 10436 KB Execution killed with signal 11 (could be triggered by violating memory limits)
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Execution timed out 3027 ms 13336 KB Time limit exceeded
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Runtime error 1512 ms 14180 KB Execution killed with signal 11 (could be triggered by violating memory limits)
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Runtime error 3 ms 632 KB Execution killed with signal 11 (could be triggered by violating memory limits)
2 Halted 0 ms 0 KB -