#include "bits/stdc++.h"
using namespace std;
#define all(x) begin(x),end(x)
typedef long long ll;
typedef vector<int> vi;
const int oo = 1e9;
struct DSU{
vector<int> sz,parent;
int components;
void reset(int n) {
fill(sz.begin(),sz.begin()+n,1);
iota(parent.begin(),parent.begin()+n,0);
components=n;
}
DSU(int n) : sz(n),parent(n) {
reset(n);
}
void link(int a, int b) {
components--;
if(sz[a]<sz[b]) swap(a,b);
sz[a]+=sz[b];
parent[b] = a;
}
bool unite(int a, int b) {
int pa = find(a), pb = find(b);
if(pa!=pb) {
link(pa,pb);
return true;
}
return false;
}
int find(int a) {
if(a==parent[a]) return a;
return parent[a] = find(parent[a]);
}
};
struct dynamicMST {
struct edge {
int l,r;
int u,v,w;
bool operator<(const edge& o) {
return w<o.w;
}
};
vector<edge> ives; // edges + time interval that they are active.
vector<array<int,3>> startes;
vi touch; // last time this edge was touched
int totaln;
DSU dsu,dsu2;
vi id;
dynamicMST(vector<array<int,3>> ES, int n) : startes(ES), touch(ES.size()), totaln(n), dsu(n),dsu2(n), id(n) {
// give all edges upfront.
}
int q=0;
void update(int i, int x) {
// update edge weight of edge i to x
// if you want to delete the edge, just set it to infinity
q++;
auto& [u,v,w] = startes[i];
ives.push_back({touch[i],q,u,v,w});
touch[i]=q;
w = x;
}
vector<ll> ans;
void solve(int l, int r, vector<edge> es, int n, ll cost=0) {
// remove edges that don't belong to this interval
es.erase(stable_partition(all(es),[&](const edge& e) {return !(e.r<=l or r<=e.l);}),es.end());
dsu.reset(n),dsu2.reset(n);
// compressing connected components
for(auto& e : es) if(l<e.l or e.r<r) { // active edges
dsu.unite(e.u,e.v);
}
for(auto& e : es) if(e.l<=l and r<=e.r) { // fully overlapping edges
if(dsu.unite(e.u,e.v)) {
cost+=e.w;
dsu2.unite(e.u,e.v);
}
}
if(l+1==r) { // base case, we found the MST.
ans[l]=cost;
return;
}
int cnt=0; // relabel all connected components to 0...cnt-1
for(int i=0;i<n;++i) if(dsu2.find(i)==i) id[i]=cnt++;
dsu.reset(cnt);
for(auto& e : es) { // relabeling and marking useless edges
e.u = id[dsu2.find(e.u)], e.v = id[dsu2.find(e.v)];
if(e.l<=l and r<=e.r) {
if(!dsu.unite(e.u,e.v)) e.l=oo,e.r=-oo; // mark useless edge, will get deleted in next step
}
}
int m = (l+r)/2;
solve(l,m,es,cnt,cost);
solve(m,r,es,cnt,cost);
}
vector<ll> run() {
int m = startes.size();
q++;
for(int i=0;i<m;++i) {
auto& [u,v,w] = startes[i];
ives.push_back({touch[i],q,u,v,w});
}
sort(all(ives)); // (q+m) log(q+m) time
ans.resize(q);
solve(0,q,ives,totaln); // (q+m) log(q) alpha(n) time
return ans;
}
};
int main() {
ios_base::sync_with_stdio(false);
cin.tie(NULL);
int n,m,q; cin >> n >> m >> q;
vector<array<int,3>> es(m);
for(auto& [u,v,w] : es) {
cin >> u >> v >> w;
--u,--v;
}
dynamicMST mst(es,n);
for(int i=0;i<q;++i) {
int k,d;
cin >> k >> d, --k;
mst.update(k,d);
}
auto ans = mst.run();
for(int i=1;i<=q;++i) { // ans[0] gives the MST cost of the initial MST.
cout << ans[i] << '\n';
}
}
I2luY2x1ZGUgImJpdHMvc3RkYysrLmgiCnVzaW5nIG5hbWVzcGFjZSBzdGQ7CiNkZWZpbmUgYWxsKHgpIGJlZ2luKHgpLGVuZCh4KQp0eXBlZGVmIGxvbmcgbG9uZyBsbDsKdHlwZWRlZiB2ZWN0b3I8aW50PiB2aTsKCmNvbnN0IGludCBvbyA9IDFlOTsKCnN0cnVjdCBEU1V7CiAgICB2ZWN0b3I8aW50PiBzeixwYXJlbnQ7CiAgICBpbnQgY29tcG9uZW50czsKICAgIHZvaWQgcmVzZXQoaW50IG4pIHsKICAgICAgICBmaWxsKHN6LmJlZ2luKCksc3ouYmVnaW4oKStuLDEpOwogICAgICAgIGlvdGEocGFyZW50LmJlZ2luKCkscGFyZW50LmJlZ2luKCkrbiwwKTsKICAgICAgICBjb21wb25lbnRzPW47CiAgICB9CiAgICBEU1UoaW50IG4pIDogc3oobikscGFyZW50KG4pIHsKICAgICAgICByZXNldChuKTsKICAgIH0KICAgIHZvaWQgbGluayhpbnQgYSwgaW50IGIpIHsKICAgICAgICBjb21wb25lbnRzLS07CiAgICAgICAgaWYoc3pbYV08c3pbYl0pIHN3YXAoYSxiKTsKICAgICAgICBzelthXSs9c3pbYl07CiAgICAgICAgcGFyZW50W2JdID0gYTsKICAgIH0KICAgIGJvb2wgdW5pdGUoaW50IGEsIGludCBiKSB7CiAgICAgICAgaW50IHBhID0gZmluZChhKSwgcGIgPSBmaW5kKGIpOwogICAgICAgIGlmKHBhIT1wYikgewogICAgICAgICAgICBsaW5rKHBhLHBiKTsKICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfQogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICAgIGludCBmaW5kKGludCBhKSB7CiAgICAgICAgaWYoYT09cGFyZW50W2FdKSByZXR1cm4gYTsKICAgICAgICByZXR1cm4gcGFyZW50W2FdID0gZmluZChwYXJlbnRbYV0pOwogICAgfQp9OwoKc3RydWN0IGR5bmFtaWNNU1QgewogICAgc3RydWN0IGVkZ2UgewogICAgICAgIGludCBsLHI7CiAgICAgICAgaW50IHUsdix3OwogICAgICAgIGJvb2wgb3BlcmF0b3I8KGNvbnN0IGVkZ2UmIG8pIHsKICAgICAgICAgICAgcmV0dXJuIHc8by53OwogICAgICAgIH0KICAgIH07CiAgICB2ZWN0b3I8ZWRnZT4gaXZlczsgLy8gZWRnZXMgKyB0aW1lIGludGVydmFsIHRoYXQgdGhleSBhcmUgYWN0aXZlLgogICAgdmVjdG9yPGFycmF5PGludCwzPj4gc3RhcnRlczsgCiAgICB2aSB0b3VjaDsgLy8gbGFzdCB0aW1lIHRoaXMgZWRnZSB3YXMgdG91Y2hlZAogICAgaW50IHRvdGFsbjsKICAgIERTVSBkc3UsZHN1MjsKICAgIHZpIGlkOwogICAgZHluYW1pY01TVCh2ZWN0b3I8YXJyYXk8aW50LDM+PiBFUywgaW50IG4pIDogc3RhcnRlcyhFUyksIHRvdWNoKEVTLnNpemUoKSksIHRvdGFsbihuKSwgZHN1KG4pLGRzdTIobiksIGlkKG4pICB7CiAgICAgICAgLy8gZ2l2ZSBhbGwgZWRnZXMgdXBmcm9udC4KICAgIH0KICAgIGludCBxPTA7CiAgICB2b2lkIHVwZGF0ZShpbnQgaSwgaW50IHgpIHsKICAgICAgICAvLyB1cGRhdGUgZWRnZSB3ZWlnaHQgb2YgZWRnZSBpIHRvIHgKICAgICAgICAvLyBpZiB5b3Ugd2FudCB0byBkZWxldGUgdGhlIGVkZ2UsIGp1c3Qgc2V0IGl0IHRvIGluZmluaXR5CiAgICAgICAgcSsrOwogICAgICAgIGF1dG8mIFt1LHYsd10gPSBzdGFydGVzW2ldOwogICAgICAgIGl2ZXMucHVzaF9iYWNrKHt0b3VjaFtpXSxxLHUsdix3fSk7CiAgICAgICAgdG91Y2hbaV09cTsKICAgICAgICB3ID0geDsKICAgIH0KICAgIHZlY3RvcjxsbD4gYW5zOwogICAgdm9pZCBzb2x2ZShpbnQgbCwgaW50IHIsIHZlY3RvcjxlZGdlPiBlcywgaW50IG4sIGxsIGNvc3Q9MCkgewogICAgICAgIC8vIHJlbW92ZSBlZGdlcyB0aGF0IGRvbid0IGJlbG9uZyB0byB0aGlzIGludGVydmFsCiAgICAgICAgZXMuZXJhc2Uoc3RhYmxlX3BhcnRpdGlvbihhbGwoZXMpLFsmXShjb25zdCBlZGdlJiBlKSB7cmV0dXJuICEoZS5yPD1sIG9yIHI8PWUubCk7fSksZXMuZW5kKCkpOwogICAgICAgIGRzdS5yZXNldChuKSxkc3UyLnJlc2V0KG4pOwoKICAgICAgICAvLyBjb21wcmVzc2luZyBjb25uZWN0ZWQgY29tcG9uZW50cwogICAgICAgIGZvcihhdXRvJiBlIDogZXMpIGlmKGw8ZS5sIG9yIGUucjxyKSB7IC8vIGFjdGl2ZSBlZGdlcwogICAgICAgICAgICBkc3UudW5pdGUoZS51LGUudik7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIGZvcihhdXRvJiBlIDogZXMpIGlmKGUubDw9bCBhbmQgcjw9ZS5yKSB7IC8vIGZ1bGx5IG92ZXJsYXBwaW5nIGVkZ2VzCiAgICAgICAgICAgIGlmKGRzdS51bml0ZShlLnUsZS52KSkgewogICAgICAgICAgICAgICAgY29zdCs9ZS53OwogICAgICAgICAgICAgICAgZHN1Mi51bml0ZShlLnUsZS52KTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgaWYobCsxPT1yKSB7IC8vIGJhc2UgY2FzZSwgd2UgZm91bmQgdGhlIE1TVC4KICAgICAgICAgICAgYW5zW2xdPWNvc3Q7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CgogICAgICAgIGludCBjbnQ9MDsgLy8gcmVsYWJlbCBhbGwgY29ubmVjdGVkIGNvbXBvbmVudHMgdG8gMC4uLmNudC0xCiAgICAgICAgZm9yKGludCBpPTA7aTxuOysraSkgaWYoZHN1Mi5maW5kKGkpPT1pKSBpZFtpXT1jbnQrKzsKICAgICAgICBkc3UucmVzZXQoY250KTsKICAgICAgICBmb3IoYXV0byYgZSA6IGVzKSB7IC8vIHJlbGFiZWxpbmcgYW5kIG1hcmtpbmcgdXNlbGVzcyBlZGdlcwogICAgICAgICAgICBlLnUgPSBpZFtkc3UyLmZpbmQoZS51KV0sIGUudiA9IGlkW2RzdTIuZmluZChlLnYpXTsKICAgICAgICAgICAgaWYoZS5sPD1sIGFuZCByPD1lLnIpIHsKICAgICAgICAgICAgICAgIGlmKCFkc3UudW5pdGUoZS51LGUudikpIGUubD1vbyxlLnI9LW9vOyAvLyBtYXJrIHVzZWxlc3MgZWRnZSwgd2lsbCBnZXQgZGVsZXRlZCBpbiBuZXh0IHN0ZXAKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBpbnQgbSA9IChsK3IpLzI7CiAgICAgICAgc29sdmUobCxtLGVzLGNudCxjb3N0KTsKICAgICAgICBzb2x2ZShtLHIsZXMsY250LGNvc3QpOwogICAgfQogICAgdmVjdG9yPGxsPiBydW4oKSB7CiAgICAgICAgaW50IG0gPSBzdGFydGVzLnNpemUoKTsKICAgICAgICBxKys7CiAgICAgICAgZm9yKGludCBpPTA7aTxtOysraSkgewogICAgICAgICAgICBhdXRvJiBbdSx2LHddID0gc3RhcnRlc1tpXTsKICAgICAgICAgICAgaXZlcy5wdXNoX2JhY2soe3RvdWNoW2ldLHEsdSx2LHd9KTsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgc29ydChhbGwoaXZlcykpOyAvLyAocSttKSBsb2cocSttKSB0aW1lCiAgICAgICAgYW5zLnJlc2l6ZShxKTsKICAgICAgICBzb2x2ZSgwLHEsaXZlcyx0b3RhbG4pOyAvLyAocSttKSBsb2cocSkgYWxwaGEobikgdGltZQogICAgICAgIHJldHVybiBhbnM7CiAgICB9Cn07CgppbnQgbWFpbigpIHsKICAgIGlvc19iYXNlOjpzeW5jX3dpdGhfc3RkaW8oZmFsc2UpOwogICAgY2luLnRpZShOVUxMKTsKICAgIGludCBuLG0scTsgY2luID4+IG4gPj4gbSA+PiBxOwogICAgdmVjdG9yPGFycmF5PGludCwzPj4gZXMobSk7CgogICAgZm9yKGF1dG8mIFt1LHYsd10gOiBlcykgewogICAgICAgIGNpbiA+PiB1ID4+IHYgPj4gdzsKICAgICAgICAtLXUsLS12OwogICAgfQoKICAgIGR5bmFtaWNNU1QgbXN0KGVzLG4pOwoKICAgIGZvcihpbnQgaT0wO2k8cTsrK2kpIHsKICAgICAgICBpbnQgayxkOwogICAgICAgIGNpbiA+PiBrID4+IGQsIC0tazsKICAgICAgICBtc3QudXBkYXRlKGssZCk7CiAgICB9CiAgICBhdXRvIGFucyA9IG1zdC5ydW4oKTsKICAgIGZvcihpbnQgaT0xO2k8PXE7KytpKSB7IC8vIGFuc1swXSBnaXZlcyB0aGUgTVNUIGNvc3Qgb2YgdGhlIGluaXRpYWwgTVNULgogICAgICAgIGNvdXQgPDwgYW5zW2ldIDw8ICdcbic7CiAgICB9CiAgICAKfQ==