Cod sursa(job #959585)

Utilizator GavrilaVladGavrila Vlad GavrilaVlad Data 8 iunie 2013 13:58:07
Problema Nowhere-zero Scor 0
Compilator cpp Status done
Runda Infoarena Cup 2013 Marime 1.65 kb
#include <cstdio>
#include <vector>

using namespace std;

#define maxn 100010

int n, m, nod, mc, st0, f[maxn], st[maxn];
double xx, yy;
int a[maxn], b[maxn], o[maxn], pz[maxn];
vector<int> v[maxn];

int main()
{
    freopen("nowhere-zero.in", "r", stdin);
    freopen("nowhere-zero.out", "w", stdout);

    scanf("%d%d", &n, &m);

    for(int i=1; i<=n; ++i)
        scanf("%lf%lf", &xx, &yy);

    for(int i=1; i<=m; ++i)
    {
        scanf("%d%d", &a[i], &b[i]);
        v[a[i]].push_back(i);
        v[b[i]].push_back(i);
    }

    for(int i=1; i<=n; ++i)
        if(pz[i]!=v[i].size())
        {
            st[++st0]=i;
            while(st0>0 &&st0<100)
            {
                nod=st[st0];
                if(pz[nod]==v[nod].size())
                {
                    --st0;
                    continue;
                }

                while(f[v[nod][pz[nod]]]==1)
                {
                    ++pz[nod];
                    if(pz[nod]==v[nod].size())
                        break;
                }
                if(pz[nod]==v[nod].size())
                {
                    --st0;
                    continue;
                }

                mc=v[nod][pz[nod]];
                f[mc]=1;

                if(nod==a[mc])
                    st[++st0]=b[mc];
                else
                {
                    st[++st0]=a[mc];
                    o[mc]=1;
                }
            }
        }

    for(int i=1; i<=m; ++i)
        if(o[i]==0)
            printf("%d %d 1\n", a[i], b[i]);
        else
            printf("%d %d 1\n", b[i], a[i]);

    return 0;
}