Pagini recente » Cod sursa (job #2707410) | Cod sursa (job #471688) | Cod sursa (job #352033) | Cod sursa (job #1779774) | Cod sursa (job #2962248)
#include <iostream>
#include <fstream>
#include <vector>
#include <unordered_map>
#include <map>
using namespace std;
struct edge_info{
int x, y, viz;
};
vector<edge_info> edges;
unordered_map<int, vector<int>> sol;
vector<vector<pair<int, int>>> graf;
vector<int> degs;
int noNodes, noEdges, k = -1;
void citire();
void testEulerian();
void dfs(int node);
int main()
{
citire();
testEulerian();
return 0;
}
void citire(){
int x,y, l = 0;
fstream fin("johnie.in");
fin>>noNodes>>noEdges;
graf.resize(noNodes + 1);
degs.resize(noNodes + 1);
for(int i = 0; i < noEdges; ++i){
fin>>x>>y;
graf[x].push_back(make_pair(y, l));
graf[y].push_back(make_pair(x, l++));
edge_info init_edge;
init_edge.x = x; init_edge.y = y; init_edge.viz = false;
edges.push_back(init_edge);
degs[x]++; degs[y]++;
}
for(int i = 1; i <= noEdges; ++i){
if(degs[i] % 2 == 1){
graf[0].push_back(make_pair(i, l));
graf[i].push_back(make_pair(0, l++));
edge_info init_edge;
init_edge.x = 0; init_edge.y = i; init_edge.viz = false;
edges.push_back(init_edge);
}
}
fin.close();
}
void testEulerian(){
fstream fout("johnie.out");
dfs(0);
fout<<sol.size()<<endl;
for(auto path:sol){
fout<<path.second.size()<<" ";
for(auto& node:path.second){
fout<<node<<" ";
}
fout<<endl;
}
fout.close();
}
void dfs(int node){
for(auto& vx:graf[node]){
int v = vx.first; int edge_id = vx.second;
if(!edges[edge_id].viz){
edges[edge_id].viz = true;
dfs(v);
}
}
if(node == 0){
k++;
}else{
sol[k].push_back(node);
}
}