216322026-01-13 17:31:20algoproEgyirányú egyensúlycpp17Elfogadva 50/5045ms3576 KiB
// UUID: ae21512a-c959-4d63-9590-b2ff7b56c68b
#include <bits/stdc++.h>
using namespace std;

vector<vector<pair<int,int>>>g;
vector<pair<int,int>>edge;
vector<int>dir,d;
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);d.resize(n+1,0);
	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};
		d[u]++;d[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() && d[i]%2==1){
			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<<"<- ";
	}
}
RészfeladatÖsszpontTesztVerdiktIdőMemória
base50/50
1Elfogadva0/01ms316 KiB
2Elfogadva0/035ms2600 KiB
3Elfogadva2/21ms316 KiB
4Elfogadva2/21ms316 KiB
5Elfogadva2/21ms316 KiB
6Elfogadva2/21ms316 KiB
7Elfogadva2/21ms316 KiB
8Elfogadva2/21ms316 KiB
9Elfogadva2/21ms316 KiB
10Elfogadva2/22ms400 KiB
11Elfogadva2/22ms508 KiB
12Elfogadva2/22ms316 KiB
13Elfogadva3/38ms828 KiB
14Elfogadva3/317ms1652 KiB
15Elfogadva3/318ms1844 KiB
16Elfogadva3/324ms2300 KiB
17Elfogadva3/39ms1372 KiB
18Elfogadva3/325ms2100 KiB
19Elfogadva3/326ms2064 KiB
20Elfogadva3/335ms3124 KiB
21Elfogadva3/341ms2868 KiB
22Elfogadva3/345ms3576 KiB