제출 #790376

#제출 시각아이디문제언어결과실행 시간메모리
790376bane어르신 집배원 (BOI14_postmen)C++17
38 / 100
1087 ms66892 KiB
    #include<bits/stdc++.h>
        using namespace std;
         
        #ifdef LOCAL
        #include "algo/debug.h"
        #else
        #define debug(...) 42
        #endif
         
        #define fr first
        #define sc second 
        #define mp make_pair 
        #define pb push_back 
        #define pf push_front
        #define all(x) x.begin(),x.end()
        #define rall(x) x.rbegin(), x.rend()
         
    	#pragma GCC target("avx2")
    	#pragma GCC optimize("O3")
    	#pragma GCC optimize("Ofast,unroll-loops")
         
        using ll = long long;
        using ull = unsigned long long;
        using str = string;
        using pii = pair<int,int>;
        using pll = pair<long long, long long>;
         
        const int nax = 500'001;
        vector<int>flag(nax);
        vector<vector<pair<int,int>>>adj(nax);
        vector<int>pracka;
		unordered_map<int,int>roz[nax];
        void Euler(int v){
        	for (pii& x : adj[v]){
        		if (flag[x.sc])continue;
        		flag[x.sc] = 1;
        		Euler(x.fr);
        	}
        	pracka.pb(v);
        }
         
        void solve(){
        	int n, m;
    		scanf("%d %d", &n, &m);
        	for (int i = 0; i < m; i++){
        		int a,b;
        		scanf("%d %d", &a, &b);
        		--a,--b;
				if (roz[a][b])continue;
				roz[a][b] = 1;
				roz[b][a] = 1;
        		adj[a].pb({b,i});
        		adj[b].pb({a,i});
        	}
        	Euler(0);
        	int r = -1;
        	vector<vector<int>>cycles;
        	vector<int>visited(n + 1);
        	stack<int>c;
        	while(r < (int)pracka.size()){
        		++r;
        		if (visited[pracka[r]]){
        			cycles.push_back(vector<int>());
        			cycles.back().push_back(pracka[r]);
        			while(c.top() != pracka[r]){
        				visited[c.top()] = 0;
        				cycles.back().push_back(c.top());
        				c.pop();
        			}
        		}else{
        			c.push(pracka[r]);
        			visited[pracka[r]] = 1;
        		}
        	}
        	for (int i = 0; i < (int)cycles.size() - 1; i++){
        		for (int j : cycles[i])printf("%d ", j + 1);
    			printf("\n");
        	}
        }
         
        int main(){
        	solve();
        	return 0;
        }

컴파일 시 표준 에러 (stderr) 메시지

postmen.cpp: In function 'void solve()':
postmen.cpp:44:12: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   44 |       scanf("%d %d", &n, &m);
      |       ~~~~~^~~~~~~~~~~~~~~~~
postmen.cpp:47:16: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   47 |           scanf("%d %d", &a, &b);
      |           ~~~~~^~~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...