Cod sursa(job #2644654)

Utilizator loraclorac lorac lorac Data 25 august 2020 13:58:46
Problema Santa Scor 20
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.15 kb
#include <bits/stdc++.h>
using namespace std;
ifstream in("santa.in");
ofstream out("santa.out");
#define msj "No chance"
const int lim=45e3+5;
vector<int> vec[lim];
bool ok[lim];
int tip[lim];
int nr=0;
int s,e,q;
bool df(int nod)
{
    ok[nod]=1;
    if(nod==e) {nr++;return 1;}
    tip[nod]=0;
    for(int x:vec[nod])
    {
        if(!ok[x]) tip[x]=df(x);
        tip[nod]=max(tip[nod],tip[x]);
    }
    nr+=tip[nod];
    return tip[nod];
}
void afis(vector<int> v)
{
    for(int i=0;i<v.size();++i)
        out<<v[i]<<' ';
}
vector<int> sol,ans;
void compute(int nod)
{
    ok[nod]=1;
    ans.push_back(nod);
    if(ans.size()==nr)
    {
        sol=ans;
        afis(sol);
        exit(EXIT_SUCCESS);
    }
    for(int x:vec[nod])
    if(!ok[x]) compute(x);
    ok[nod]=0;
    ans.pop_back();
}
int main()
{
    int n,m,x,y;
    in>>n>>m;
    for(int i=1;i<=m;++i)
    {
        in>>x>>y;
        vec[x].push_back(y);
        vec[y].push_back(x);
    }
    in>>s>>e>>q;
    df(s);
    nr+=1-tip[q];
    tip[q]=1;
    for(int i=1;i<=n;++i)
        ok[i]=0;
    out<<nr<<'\n';
    compute(q);
    return 0;
}