Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <algorithm>
- #include <bitset>
- #include <cctype>
- #include <cmath>
- #include <complex>
- #include <cstdio>
- #include <cstdlib>
- #include <cstring>
- #include <ctime>
- #include <deque>
- #include <fstream>
- #include <iostream>
- #include <list>
- #include <map>
- #include <memory>
- #include <queue>
- #include <set>
- #include <sstream>
- #include <stack>
- #include <string>
- #include <utility>
- #include <vector>
- #include <iomanip>
- using namespace std;
- #define REP(i,n) for(__typeof(n) i=0; i<(n); i++)
- #define FOR(i,a,b) for(__typeof(b) i=(a); i<=(b); i++)
- #define RESET(t,value) memset((t), value, sizeof(t))
- typedef long long int64;
- typedef long double d64;
- #define READ(f) freopen(f, "r", stdin)
- #define WRITE(f) freopen(f, "w", stdout)
- #define PI acos(-1.0)
- #define INF (1<<30)
- #define eps 1e-8
- #define pb push_back
- #define ppb pop_back
- #define pii pair<double,double>
- #define G struct node
- vector < int64 > pset(10000);
- void initSet(int64 _size){ pset.resize(_size); FOR(i,0,_size) pset[i]=i;}
- int64 findSet(int64 i){return (pset[i]== i)?i: (pset[i] = findSet(pset[i]));}
- void unionSet(int64 i,int64 j){ pset[findSet(i)]=findSet(j);}
- bool isSameSet(int64 i,int64 j){ return findSet(i)==findSet(j);}
- #define Max 10000
- G
- {
- int64 u,v,cost;
- bool operator <(const G& a) const {
- return cost<a.cost;
- }
- }g[Max+10];
- vector <int64> v;
- void reset()
- {
- pset.clear();
- v.clear();
- }
- int64 mstree(int64 edge_no, int64 vertex_no)
- {
- initSet(vertex_no+5);
- sort(g,g+edge_no);
- int64 mst = 0, count=0;
- REP(i,edge_no)
- {
- if(!isSameSet(g[i].u, g[i].v))
- {
- v.pb(g[i].cost);
- mst += g[i].cost;
- unionSet(g[i].u,g[i].v);
- }
- }
- if(v.size()!= vertex_no -1) mst = -1;
- return mst;
- }
- int main()
- {
- //READ("1172.txt");
- int64 vertex_no, edge_no,airport_cost,mst;
- int t, caseNo=1;
- cin>>t;
- while(t--)
- {
- cin>>vertex_no>>edge_no;
- REP(i,edge_no) cin>>g[i].u>>g[i].v>>g[i].cost;
- cout<<"Case "<<caseNo<<":\n";
- FOR(i, 1, edge_no)
- {
- mst = mstree(i, vertex_no);
- cout<<mst<<endl;
- reset();
- }
- caseNo++;
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement