216192026-01-13 17:21:26algoproEgyirányú egyensúlycpp17Wrong answer 25/5045ms3132 KiB
// UUID: 6cae8eea-fe9a-4127-bb10-fe3486a80034
#include <bits/stdc++.h>
using namespace std;

vector<vector<pair<int,int>>>g;
vector<pair<int,int>>edge;
vector<int>dir;
bool found=false;

void dfs(int x){
	while(!g[x].empty() && !found){
		pair<int,int>y=g[x].back();
		g[x].pop_back();
		if(dir[y.second]==0){
			dir[y.second]=y.first;
			dfs(y.first);
		}
	}
	found=true;
}

int main() {
	int n,m;cin>>n>>m;
	g.resize(n+1);edge.resize(m+1);dir.resize(m+1);
	for(int i=1;i<=m;i++){
		int u,v;cin>>u>>v;
		g[u].push_back({v,i});
		g[v].push_back({u,i});
		edge[i]={u,v};
	}
	int c=0;
	for(int i=1;i<=n;i++)if(g[i].size()%2==1)c++;
	for(int i=1;i<=n;i++){
		if(!g[i].empty()){
			found=false;
			dfs(i);
		}
	}
	for(int i=1;i<=n;i++){
		if(!g[i].empty()){
			found=false;
			dfs(i);
		}
	}
	cout<<c<<'\n';
	for(int i=1;i<=m;i++){
		if(edge[i].second==dir[i])cout<<"-> ";
		else cout<<"<- ";
	}
}
SubtaskSumTestVerdictTimeMemory
base25/50
1Accepted0/01ms316 KiB
2Wrong answer0/034ms2612 KiB
3Accepted2/21ms316 KiB
4Accepted2/21ms316 KiB
5Accepted2/21ms316 KiB
6Accepted2/21ms316 KiB
7Accepted2/21ms316 KiB
8Wrong answer0/22ms428 KiB
9Accepted2/21ms316 KiB
10Wrong answer0/22ms316 KiB
11Accepted2/22ms316 KiB
12Accepted2/22ms456 KiB
13Wrong answer0/38ms928 KiB
14Wrong answer0/317ms1480 KiB
15Accepted3/319ms1844 KiB
16Accepted3/324ms2392 KiB
17Wrong answer0/39ms1416 KiB
18Accepted3/325ms2100 KiB
19Wrong answer0/327ms1968 KiB
20Wrong answer0/335ms2868 KiB
21Wrong answer0/341ms2868 KiB
22Wrong answer0/345ms3132 KiB