Pagini recente » Cod sursa (job #809817) | Cod sursa (job #919159) | Cod sursa (job #2176477) | Cod sursa (job #987337) | Cod sursa (job #959485)
Cod sursa(job #959485)
#include <fstream>
#include <vector>
#include <map>
#define NM 100010
using namespace std;
ifstream f("nowhere-zero.in");
ofstream g("nowhere-zero.out");
int N, M;
double z;
int i, j;
vector<int> G[NM];
map<pair<int, int>, int> Map;
bool Viz[NM];
int D[NM];
void Euler (int nod)
{
Viz[nod]=1;
D[nod]++;
for (vector<int>::iterator it=G[nod].begin(); it!=G[nod].end(); ++it)
if (Map[make_pair(nod, *it)]==0 && Map[make_pair(*it, nod)]==0)
{
Map[make_pair(nod, *it)]++;
Euler(*it);
D[nod]++;
}
if (D[nod]%2)
{
for (vector<int>::iterator it=G[nod].begin(); it!=G[nod].end(); ++it)
if (Map[make_pair(nod, *it)]>=1 && Map[make_pair(nod, *it)]<=4)
{
Map[make_pair(nod, *it)]++;
Euler(*it);
return;
}
}
}
int main ()
{
f >> N >> M;
for (i=1; i<=N; i++)
f >> z >> z;
for (i=1; i<=M; i++)
{
int x, y;
f >> x >> y;
G[x].push_back(y);
G[y].push_back(x);
}
for (i=1; i<=N; i++)
if (!Viz[i])
Euler(i);
for (map< pair<int, int>, int>::iterator it=Map.begin(); it!=Map.end(); ++it)
if (it->second>0)
g << (it->first).first << ' ' << (it->first).second << ' ' << it->second << '\n';
f.close();
g.close();
return 0;
}