Go to diff to previous submission
#include <iostream> #include <algorithm> #include <vector> #include <queue> #include <cstring> using namespace std; int total_length; bool connected[2001]; struct Edge { int v1,v2,l; Edge(int from,int to,int length) { v1=from;v2=to;l=length; } }; bool cmpE(const Edge &e1, const Edge &e2) { return e1.l < e2.l; } vector<Edge> edges; void print_edges(const vector<Edge> &edges) { for(int i = 0; i < edges.size(); i++) cout << edges[i].l << ','; cout << endl; } void AddToG(const Edge &e) { total_length += e.l; connected[e.v1] = true; connected[e.v2] = true; } int FindEdge(int vertex)// najdu prvni hranu s timto uzlem k jiz pripojenymu uzlu { for(int i = 0, im = edges.size(); i < im; i++) { if(edges[i].v1 == vertex) { if(connected[edges[i].v2]) return i; } else if(edges[i].v2 == vertex) { if(connected[edges[i].v1]) return i; } } return -1; } int main() { bool disconnected; int N,M,v1,v2,l; // while(1) { cin >> N >> M; if(cin.eof()) break; // edges.clear(); memset(connected,0,2001); total_length = 0; disconnected = false; // for(int m = 0; m < M; m++) { cin >> v1 >> v2 >> l; edges.push_back(Edge(v1,v2,l)); } if(edges.size() > 0) { sort(edges.begin(),edges.end(),cmpE); // AddToG(edges[edges.size()-1]); // for(int n = 1; n <= N; n++) // pro kazdy uzel { if(connected[n]) continue; // najdu prvni hranu s timto uzlem k pripojenymu uzlu int ei = FindEdge(n); if(ei < 0) { disconnected = true; break; } AddToG(edges[ei]); } } else disconnected = true; // if(disconnected) cout << "disconnected\n"; else cout << (total_length - (2*edges[edges.size()-1].l)) << '\n'; } return 0; }
--- c4.s1225.cteam054.spider.cpp.0.spider.cpp +++ c4.s1268.cteam054.spider.cpp.0.spider.cpp @@ -77,20 +77,25 @@ edges.push_back(Edge(v1,v2,l)); } - sort(edges.begin(),edges.end(),cmpE); - // - AddToG(edges[edges.size()-1]); - // - for(int n = 1; n <= N; n++) // pro kazdy uzel + if(edges.size() > 0) { - if(connected[n]) continue; - // najdu prvni hranu s timto uzlem k pripojenymu uzlu - int ei = FindEdge(n); - if(ei < 0) + sort(edges.begin(),edges.end(),cmpE); + // + AddToG(edges[edges.size()-1]); + // + for(int n = 1; n <= N; n++) // pro kazdy uzel { - disconnected = true; - break; + if(connected[n]) continue; + // najdu prvni hranu s timto uzlem k pripojenymu uzlu + int ei = FindEdge(n); + if(ei < 0) + { + disconnected = true; + break; + } + AddToG(edges[ei]); } - AddToG(edges[ei]); } + else + disconnected = true; // if(disconnected)