#include #include #include #include using namespace std; int Edge[1024]; int EdgeR[1024]; int EdgeVisited[1024]; int EdgeMinCost[1024]; int Node[128]; int Color[128]; int Degree[128]; int Node2[128]; int n, m; #define WHITE 0 #define BLACK 1 #define GREY 2 void displayG() { cout << "Node\t"; for(int i=0; i <= n; i++) cout << Node[i] << " "; cout << endl << "Edge\t"; for(int i=0; i < m*2; i++) cout << Edge[i] << " "; cout << endl << "Degree\t"; for(int i=0; i < n; i++) cout << Degree[i] << " "; cout << endl << "Color\t"; for(int i=0; i < n; i++) cout << Color[i] << " "; cout << endl << "EdgeR\t"; for(int i=0; i < m*2; i++) cout << EdgeR[i] << " "; cout << endl << endl; } int cost = 0; void DFS2(int source) { Color[source] = GREY; for (int i = Node[source]; i < Node[source + 1]; i++) { if (Color[Edge[i]] == WHITE) { Degree[source]--; Degree[Edge[i]]--; cost++; EdgeVisited[i] = true; EdgeVisited[EdgeR[i]] = true; EdgeMinCost[i] = true; DFS2(Edge[i]); } } for (int i = Node[source]; i < Node[source + 1]; i++) { if (!EdgeVisited[i] && Degree[Edge[i]] > 0) { Degree[source]--; Degree[Edge[i]]--; cost += m; EdgeVisited[i] = true; EdgeVisited[EdgeR[i]] = true; DFS2(Edge[i]); } } for (int i = Node[source]; i < Node[source + 1]; i++) { if (Degree[Edge[i]] > 0 && EdgeMinCost[i]) { Degree[source]--; Degree[Edge[i]]--; cost++; DFS2(Edge[i]); } } } void DFS() { for (int i=0; i< n; i++) Color[i] = WHITE; DFS2(0); } ofstream fout("output.txt"); int main(int argc, char** argv) { ifstream fin("input.txt"); fin >> n >> m; int source, dest; for (int i= 0; i < m; i++) { fin >> source >> dest; Degree[source]++; Degree[dest]++; } Node[0] = 0; for (int i= 1; i<= n; i++) Node[i] = Node[i-1] + Degree[i-1]; for (int i= 0; i <= n; i++) Node2[i] = Node[i]; fin.close(); fin.open("input.txt"); fin >> n >> m; for (int i= 0; i < m; i++) { fin >> source >> dest; Edge[--Node2[source+1]] = dest; Edge[--Node2[dest+1]] = source; EdgeR[Node2[source+1]] = Node2[dest+1]; EdgeR[Node2[dest+1]] = Node2[source+1]; } //displayG(); DFS(); //displayG(); fout << cost; return EXIT_SUCCESS; }