Submission #30137

#TimeUsernameProblemLanguageResultExecution timeMemory
30137gs14004무제 (POI11_smi)C++14
50 / 100
3000 ms162908 KiB
#include <bits/stdc++.h>
using namespace std;
typedef long long lint;
typedef long double llf;
typedef pair<int, int> pi;
const int MAXN = 100005;

int n, m;
set<int> gph[MAXN];
vector<vector<int>> pth;
vector<pi> lis;

void dfs(int x){
	while(!gph[x].empty()){
		int nxt = *gph[x].begin();
		gph[x].erase(nxt);
		gph[nxt].erase(x);
		dfs(nxt);
		lis.push_back(pi(x, nxt));
	}
}

bool instk[MAXN];

int main(){
	scanf("%d %d",&n,&m);
	for(int i=0; i<m; i++){
		int s, e, x, y;
		scanf("%d %d %d %d",&s,&e,&x,&y);
		if(x == y) continue;
		gph[s].insert(e);
		gph[e].insert(s);
	}
	for(int i=1; i<=n; i++){
		if(gph[i].size() & 1){
			puts("NIE");
			return 0;
		}
		if(gph[i].empty()) continue;
		lis.clear();
		dfs(i);
		reverse(lis.begin(), lis.end());
		stack<int> stk;
		stk.push(lis[0].first);
		instk[lis[0].first] = 1;
		for(auto &i : lis){
			if(instk[i.second]){
				vector<int> v = {i.second};
				while(!stk.empty() && stk.top() != i.second){
					v.push_back(stk.top());
					instk[stk.top()] = 0;
					stk.pop();
				}
				v.push_back(i.second);
				pth.push_back(v);
			}
			else{
				stk.push(i.second);
				instk[i.second] = 1;
			}
		}
	}
	printf("%d\n", pth.size());
	for(auto &i : pth){
		printf("%d ", i.size() - 1);
		for(auto &j : i) printf("%d ", j);
		puts("");
	}
}

Compilation message (stderr)

smi.cpp: In function 'int main()':
smi.cpp:63:27: warning: format '%d' expects argument of type 'int', but argument 2 has type 'std::vector<std::vector<int> >::size_type {aka long unsigned int}' [-Wformat=]
  printf("%d\n", pth.size());
                           ^
smi.cpp:65:29: warning: format '%d' expects argument of type 'int', but argument 2 has type 'std::vector<int>::size_type {aka long unsigned int}' [-Wformat=]
   printf("%d ", i.size() - 1);
                             ^
smi.cpp:26:22: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
  scanf("%d %d",&n,&m);
                      ^
smi.cpp:29:35: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   scanf("%d %d %d %d",&s,&e,&x,&y);
                                   ^
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...