222032026-01-14 17:48:59algoproEgyirányú egyensúlycpp17Accepted 50/50126ms5816 KiB
// UUID: 2d501511-5b30-4580-a0b3-fc6d0457d816
#include <bits/stdc++.h>
using namespace std;

typedef pair<int, int> pii;

vector<vector<pii>> csucsok;
vector<pii> elek;
vector<int> irany;
vector<bool> volt;

void keres(int akt){
	for(auto x : csucsok[akt]){
		if(irany[x.second] != -1) continue;

		irany[x.second] = (akt == elek[x.second].first ? 1 : 0);
		keres(x.first);
	}

	volt[akt] = 1;
}

int main() {
	int n, m;
	cin >> n >> m;

	csucsok.assign(n + 1, vector<pii>());
	for(int i = 0; i < m; i++){
		int a, b;
		cin >> a >> b;
		a--; b--;

		elek.push_back({a, b});
		csucsok[a].push_back({b, i});
		csucsok[b].push_back({a, i});
	}

	int ind = m;
	int ans = 0;
	for(int i = 0; i < n; i++){
		if(csucsok[i].size() % 2 == 1){
			elek.push_back({i, n});
			csucsok[n].push_back({i, ind});
			csucsok[i].push_back({n, ind});
			ind++;
			ans++;
		}
	}

	irany.assign(ind, -1);

	volt.assign(n + 1, 0);
	for(int i = 0; i <= n; i++){
		if(volt[i]) continue;

		keres(i);
	}


	cout << ans << "\n";
	for(int i = 0; i < m; i++){
		/*if(irany[i] == 1){
			cout << "-> ";
		} else{
			cout << "<- ";
		}*/

		cout << (irany[i] ? "-> " : "<- ");

		/*if(irany[i] == 1){
			cout << elek[i].first + 1 << " " << elek[i].second + 1 << "\n";
		} else{
			cout << elek[i].second + 1 << " " << elek[i].first + 1 << "\n";
		}*/
	}
	cout << "\n";
}
SubtaskSumTestVerdictTimeMemory
base50/50
1Accepted0/01ms316 KiB
2Accepted0/041ms4268 KiB
3Accepted2/21ms316 KiB
4Accepted2/21ms316 KiB
5Accepted2/21ms508 KiB
6Accepted2/21ms316 KiB
7Accepted2/21ms316 KiB
8Accepted2/21ms508 KiB
9Accepted2/21ms316 KiB
10Accepted2/21ms508 KiB
11Accepted2/22ms564 KiB
12Accepted2/22ms316 KiB
13Accepted3/310ms1300 KiB
14Accepted3/370ms2992 KiB
15Accepted3/3126ms3512 KiB
16Accepted3/327ms2580 KiB
17Accepted3/352ms2236 KiB
18Accepted3/326ms2224 KiB
19Accepted3/330ms2788 KiB
20Accepted3/357ms4784 KiB
21Accepted3/343ms4780 KiB
22Accepted3/396ms5816 KiB