#include #include #include #include #include #include #include using namespace std; #define pb push_back //#define STDINPUT #define SUBMIT #define MAXN 10555 #define MAXM 100555 #define MAXV 8555 #define MAXR 100555 #ifdef SUBMIT char INPUTFILE[] = "camp.in"; char OUTPUTFILE[] = "camp.out"; #else char INPUTFILE[] = "camp.001.in"; char OUTPUTFILE[] = "camp.001.out"; #endif FILE *fin, *fout; int N,M,V,R; int W[MAXN], D[MAXN]; int d[MAXN],Bung[MAXN],BUNG[MAXN],Friend[MAXV]; class Edge { public: int x,y,w; Edge(int _x, int _y, int _w) { x = _x; y = _y; w = _w; } bool operator <(const Edge &b) const { return (w < b.w || (w == b.w && x < b.x) || (w == b.w && x == b.x && y < b.y)); } }; vector adj_friend[MAXN],adj_bun[MAXV]; vector moguci; set resG,RESG,BunPath; void input() { fscanf(fin, "%d%d", &N, &M); for(int i=0; i::iterator it = resG.begin(); it != resG.end(); ++it) { Edge e = *it; Score += e.w; } return Score; } int random_raspored() { memset(d,sizeof(d),0); for(int i=0; i 0) { int tr_idx = rand() % moguci.size(); int trF = moguci[tr_idx]; int trB = Bung[trF]; if (d[trF] == D[trF]) { moguci.erase(moguci.begin() + tr_idx); continue; } int novi = -1; int c = -1; for(int i=0; i 0) { novi = x; c = adj_friend[trF][i].w; break; } } if (novi == -1) { moguci.erase(moguci.begin() + tr_idx); continue; } int bun = -1; for(int i=0; i::iterator it = RESG.begin(); it != RESG.end(); ++it) { Edge e = *it; if (!imaRes[e.x]) { brF++; imaRes[e.x] = true; } if (!imaRes[e.y]) { brF++; imaRes[e.y] = true; } }*/ fprintf(fout, "%d\n", brF); for(int i=0; i::iterator it = RESG.begin(); it != RESG.end(); ++it) { Edge e = *it; finalScore += e.w; fprintf(fout, "%d %d\n", e.x, e.y); } #ifndef SUBMIT printf("finalScore = %d\n", finalScore); #endif // SUBMIT } void copyBUNG() { for(int i=0; i best) { best = t; RESG = resG; copyBUNG(); } } printRes(); /*fprintf(fout, "2\n"); fprintf(fout, "0 0\n"); fprintf(fout, "%d %d\n", adj_friend[0][0].v, adj_bun[0][0].v); fprintf(fout, "1\n"); fprintf(fout, "0 %d\n", adj_friend[0][0].v);*/ //greedy(); //printRes(); return 0; }