답안 #167941

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
167941 2019-12-10T23:00:53 Z Thuleanx Garbage (POI11_smi) C++14
100 / 100
948 ms 53104 KB
#include <bits/stdc++.h>
using namespace std;

const int N = 1e5+7, M = 1e6+7;
int n, m;
vector<int> adj[N];
int a[M], b[M];
int freq[N];
bool used[M];

vector<int> hh(int s) {
	vector<int> st;
	st.push_back(s);
	vector<int> ans;
	while (st.size()) {
		int v = st.back();
		if (!adj[v].size()) {
			ans.push_back(v);
			st.pop_back();
		}
		while (adj[v].size()) {
			int e = adj[v].back();
			adj[v].pop_back();
			int w = a[e]^b[e]^v;
			if (!used[e]) {
				used[e] = 1;
				st.push_back(w);
				break;
			}
		}
	}
	return ans;
}

int main() {
	ios_base::sync_with_stdio(false);
	cin.tie(NULL);

	cin>>n>>m;
	for (int i = 0; i < m; i++) {
		int s, t;
		cin>>a[i]>>b[i]>>s>>t;
		if (s ^ t) {
			adj[--a[i]].push_back(i);			
			adj[--b[i]].push_back(i);
		}
	}
	int cnt = 0;
	stringstream ss;
	for (int i = 0; i < n; i++) {
		if (adj[i].size()) {
			vector<int> res = hh(i);
			vector<int> ans;
			for (int x : res) {
				ans.push_back(x);
				if (++freq[x] == 2) {
					vector<int> q;
					while (freq[x]) {
						q.push_back(ans.back());						
						freq[ans.back()]--;
						ans.pop_back();
					}
					ss << q.size()-1;
					for (int y : q)
						ss << " " << y+1;
					ss << endl;
					ans.push_back(x);
					freq[x]++;
					cnt++;
				}
			}
			if (res[0] != res.back()) {
				cout << "NIE" << endl;
				return 0;
			}
		}
	}
	cout << cnt << endl;
	cout << ss.str();


	return 0;
}
# 결과 실행 시간 메모리 Grader output
1 Correct 4 ms 2680 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 4 ms 2680 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 5 ms 2808 KB Output is correct
2 Correct 5 ms 2808 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 7 ms 2936 KB Output is correct
2 Correct 6 ms 2936 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 6 ms 2808 KB Output is correct
2 Correct 6 ms 2812 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 10 ms 3192 KB Output is correct
2 Correct 8 ms 3064 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 92 ms 7208 KB Output is correct
2 Correct 762 ms 51924 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 441 ms 26704 KB Output is correct
2 Correct 730 ms 49624 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 683 ms 38808 KB Output is correct
2 Correct 818 ms 53104 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 948 ms 44516 KB Output is correct
2 Correct 793 ms 52992 KB Output is correct