# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
1074989 | thatsgonzalez | Senior Postmen (BOI14_postmen) | C++14 | 0 ms | 0 KiB |
This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int,int> ii;
typedef vector <int> vi;
typedef vector <ll> vl;
typedef vector<string> vs;
typedef vector<bool> vb;
typedef vector <char> vc;
typedef vector<ii> vii;
typedef vector<vi> vvi;
typedef vector<vl> vvl;
typedef vector<vc> vvc;
typedef vector<vs> vvs;
typedef pair<ll,ll> pl;
typedef double dou;
typedef vector<pl> vpl;
typedef unsigned long long ull;
typedef uint64_t i64;
typedef vector <pair<int,ii>> graph;
typedef priority_queue<ii,vii,greater<ii>> priority_graph;
typedef vector<ull> vull;
#define f first
#define s second
#define pb push_back
#define sz(x) int((x).size())
#define all(x) begin(x), end(x)
#define ts to_string
#define lb lower_bound
#define ub upper_bound
#define yes cout<<'Y'<<'E'<<'S'<<endl
#define no cout<<'N'<<'O'<<endl
#define nd "\n"
void setIO(string name=""){ios_base::sync_with_stdio(0);cin.tie(0);if(sz(name)){freopen((name+".in").c_str(),"r",stdin);freopen((name+".out").c_str(),"w",stdout);}}
ll gcd(ll a, ll b) {return b == 0 ? a : gcd(b, a % b);}
ll mcm(ll a, ll b) {return (a * b) / gcd(a, b);}
bool prime(ll n) {for(int i=2; i<=sqrt(n); i++) if(n%i==0) return false; return true;}
struct compii{bool operator()(const ii &a, const ii &b){if(a.f==a.s)return a.s<b.s;return a.f>b.f;}};
bool comp(int a, int b) {return a>b;}
ll binpow(ll n, ll x){ll ans=1; while(x){if(x&1){ans*=n;}n*=n; x>>=1;} return ans;}
namespace operators {
template<typename T1, typename T2>istream& operator>>(istream& in, pair<T1, T2>& x){in >> x.first >> x.second;return in;}
template<typename T1, typename T2>ostream& operator<<(ostream& out, pair<T1, T2> x){out << x.first << " " << x.second;return out;}
template<typename T1>istream& operator>>(istream& in, vector<T1>& x) {for (auto& i : x) in >> i;return in;}
template<typename T1>ostream& operator<<(ostream& out, vector<T1>& x) {for (auto& i : x) out << i << " ";return out;}
template<typename T1, typename T2>ostream& operator<<(ostream& out, vector<pair <T1,T2>>& x) {for (auto& i : x) out << i.f << " "<<i.s;return out;}
template<typename T1, typename T2>istream& operator>>(istream& in, vector<pair <T1,T2>>& x) {for (auto& i : x) in >> i.f >>i.s;return in;}
}
using namespace operators;
int dx[]= {1,0,-1,0};
int dy[]= {0,1,0,-1};
const int mod=1e9+7;
const ll inf=1e18;
const int nmax = 5e5+10;
vector<vector<pair<int,int>>> g;
bitset<nmax> mp;
vi used;
bitset<nmax> vis;
bool ok = false;
bitset<nmax> bts;
bool dfs(int node, int src){
//cout<<node<<endl;
used.pb(node); bts[node] = 1; bool works = false; bool pass = false;
for(auto &x: g[node]){
if(mp[x.s]) continue;
if(ok) continue;
mp[x.s] = 1;
pass = true;
if(x.f == src) {
ok = true;
return true;
}
if(bts[x.f]) {
mp[x.s] = 0;
continue;
}
works = dfs(x.f,src);
if(!works){
mp[x.s] = 0;
}
else break;
}
if(!pass){
vis[node] = 1;
}
if(!works) used.pop_back();
return works;
}
void solve()
{
int n,m; cin>>n >>m;
g.resize(n+1);
for(int i = 0; i<m; i++){
int u,v; cin>> u >> v;
g[u].pb({v,i});
g[v].pb({u,i});
}
int ind = 1;
while(ind<=n){
if(vis[ind]){
ind++; continue;
}
dfs(ind,ind);
if(!ok) ind++;
else{
/*for(auto &x: mp){
cout<<x.f<<" "<<x.s<<endl;
}*/
for(auto x: used) cout<<x<<" "; cout<<nd;
}
ok = false;
used.clear();
bts.reset();
//cout<<"----------------"<<endl;
}
for(auto &x: res){
for(auto &y: x) cout<<y<<" "; cout<<nd;
}
}
int main ()
{
setIO("");
int t=1;
//cin>>t;
while(t-->0) solve();
return 0;
}