제출 #1336379

#제출 시각아이디문제언어결과실행 시간메모리
1336379aiclo어르신 집배원 (BOI14_postmen)C++20
100 / 100
326 ms38188 KiB
#include <bits/stdc++.h>
using namespace std;

const int MAXN = 5e5 + 7;
vector<pair<int, int>> g[MAXN];
bool used[MAXN];
bool visited[MAXN];
int deg[MAXN];
bool pos[MAXN];
int n, m;

void wczytaj(){
	cin >> n >> m;
	for(int i = 0; i < m; i++){
		int a, b;
		cin >> a >> b;
		g[a].push_back({b, i});
		g[b].push_back({a, i});
		deg[a]++; deg[b]++;
	}
}

void dfs(int v){
	visited[v] = true;
	
	for(auto [u, c]: g[v])
		if(!visited[u]) dfs(u);
}

int main(){
	ios_base::sync_with_stdio(0), cin.tie(0), cout.tie(0);
	
	wczytaj();
	
	stack<int> st;
	vector<int> ans;
	
	st.push(1);
	while(!st.empty()){
		int v = st.top();
		if(g[v].size()){
			auto [tmp, idx] = g[v].back();
			g[v].pop_back();
			
			if(used[idx]) continue;
			used[idx] = true;
			st.push(tmp);
		}
		else{
			ans.push_back(v);
			st.pop();
		}
	}
	
	stack<int> ver;
	for(int i = 0; i < (int)ans.size(); i++){
		if(!pos[ans[i]]){//elementu nie aktualnie do wykorzystania
			pos[ans[i]] = true;
			ver.push(ans[i]);
		}
		else{
			while(!ver.empty()){
				if(ver.top() == ans[i]) break;
				
				cout << ver.top() <<" ";
				pos[ver.top()] = false;
				ver.pop(); 
			}
			cout << ans[i] << '\n';
		}
	}
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...