Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <fstream>
- #include <algorithm>
- #include <vector>
- #define N 200010
- #define mp make_pair
- #define f first
- #define s second
- using namespace std;
- int Mc[N], Mx[N], My[N], ind[N], inq[N], P[N], n, m, q, x, y, c, nod, k, total, nr[N], Q[N];
- vector<pair<int, int> > :: iterator it;
- vector<pair<int, int> > v[N], u;
- bool ok;
- bool cmp(int x, int y)
- {
- return Mc[x] > Mc[y];
- }
- bool cmp2(pair<int, int> x, pair<int, int> y)
- {
- return x.f < y.f;
- }
- void merge_vectors(vector<pair<int, int> > v1, vector<pair<int, int> > v2)
- {
- int i, j, n1, n2;
- n1 = v1.size();
- n2 = v2.size();
- for(i = 0, j = 0; i < n1 or j < n2; )
- {
- if(i < n1 and i < n2 and v1[i].f < v2[j].f) u.push_back(v1[i]), i++; else
- if(i < n1 and i < n2 and v1[i].f >= v2[j].f) u.push_back(v2[j]), j++; else
- if(i < n1) u.push_back(v1[i]), i++; else u.push_back(v2[j]), j++;
- }
- }
- int comp(int x)
- {
- if(P[x] == x) return x;
- return P[x] = comp(P[x]);
- }
- void reunite(int x, int y)
- {
- P[comp(x)] = comp(y);
- }
- int main()
- {
- int i;
- ifstream fi("luff.in");
- ofstream fo("luff.out");
- fi >> n >> m >> q;
- for(i = 1; i <= m; i++)
- {
- fi >> x >> y >> c;
- Mx[i] = x; My[i] = y; Mc[i] = c; ind[i] = i;
- }
- for(i = 1; i <= q; i++)
- {
- fi >> nod >> k;
- inq[nod] = 1;
- v[nod].push_back(mp(k, i));
- }
- for(i = 1; i <= n; i++) sort(v[i].begin(), v[i].end(), cmp2);
- for(i = 1; i <= n; i++)
- {
- P[i] = i;
- nr[i] = 1;
- }
- sort(ind+1, ind+m+1, cmp);
- for(i = 1; i <= m; i++)
- if(comp(Mx[ind[i]]) != comp(My[ind[i]]))
- {
- x = Mx[ind[i]]; y = My[ind[i]];
- merge_vectors(v[comp(x)], v[comp(y)]);
- total = nr[comp(x)] + nr[comp(y)];
- ok = 0;
- if(inq[comp(x)] or inq[comp(y)]) ok = 1;
- reunite(x, y);
- c = comp(x);
- if(ok)
- {
- inq[x] = inq[y] = 0;
- inq[c] = 1;
- }
- nr[c] = total;
- v[c] = u;
- for(it = v[c].begin(); it != v[c].end();)
- if(it->f <= nr[c])
- {
- ++it;
- Q[it->s] = Mc[ind[i]];
- v[c].erase(v[c].begin());
- } else ++it;
- //verific daca nu cumva am indeplinit un query
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment