Pagini recente » Cod sursa (job #1859024) | Cod sursa (job #3287526) | Cod sursa (job #1003917) | Cod sursa (job #2718548) | Cod sursa (job #5563)
Cod sursa(job #5563)
#include <stdio.h>
#include <vector>
#include <queue>
using namespace std;
int n, m, p;
int i, j;
struct nod{
int a, b, cost;
nod(int _a, int _b, int _cost) {a=_a; b=_b; cost = _cost;};
nod(){};
};
vector<vector<nod> > v;
priority_queue<nod > Q;
bool operator<(const nod &aa, const nod &bb) {
if (aa.cost > bb.cost) return true;
return false;
}
int usa[10007];
int nr;
vector<nod > sol;
int main() {
freopen("flood.in", "r", stdin);
freopen("flood.out", "w", stdout);
scanf("%d", &n);
v.resize(n+3);
scanf("%d", &m);
for (i=1; i<=m; i++) {
int a, b;
scanf("%d %d", &a, &b);
v[a].push_back(nod(a, b, 0));
v[b].push_back(nod(b, a, 0));
}
scanf("%d", &p);
for (i=1; i<=p; i++) {
int a, b, c;
scanf("%d %d %d", &a, &b, &c);
v[a].push_back(nod(a, b, c));
v[b].push_back(nod(b, a, c));
}
usa[1] = 1;
for (i=0; i<v[1].size(); i++) Q.push(v[1][i]);
int total = 0;
while(1) {
if (Q.empty()) break;
nod X = Q.top();
Q.pop();
//printf("%d %d %d\n", X.a, X.b, X.cost);
if (!usa[X.b]) {
if (X.cost) {nr++; sol.push_back(X);}
usa[X.b]=1;
total+=X.cost;
for (i=0; i<v[X.b].size(); i++) Q.push(v[X.b][i]);
}
}
printf("%d\n%d\n" ,nr, total);
for (i=0; i<sol.size(); i++) printf("%d %d %d\n", sol[i].a, sol[i].b, sol[i].cost);
return 0;
}