Submission #81712

#TimeUsernameProblemLanguageResultExecution timeMemory
81712aminraTeoretičar (COCI18_teoreticar)C++14
26 / 130
472 ms27940 KiB
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int MOD = 1e9 + 7;
const int MAXN = (int)2007;
const int MAXS = (int)1e5 + 7;
const int infint = (int)1e9;
const ll inf = (ll)1e18;
int color[2][MAXN][MAXN];
int id[MAXN][MAXN];
int ans[MAXS], a, b, m;
void dfs(int p, int u, int v, int c1, int c2)
{
    int tmp = color[1 - p][v][c1];
    color[p][u][c1] = v;
    color[1 - p][v][c1] = u;
    if(!tmp)
    {
        color[1 - p][v][c2] = 0;
        return;
	}
    dfs(1 - p, v, tmp, c2, c1);
}
int main()
{
    ios::sync_with_stdio(false);
    cin.tie(0); cout.tie(0);
    cin >> a >> b >> m;
    int cnt = 0;
    for(int i = 1; i <= m; i++)
    {
        int u, v;
        cin >> u >> v;
        id[u][v] = i;
        int c1 = 1, c2 = 1;
        while(color[0][u][c1]) c1++;
        while(color[1][v][c2]) c2++;
        cnt = max(cnt, max(c1,c2));
        if(c1 == c2)
        	color[0][u][c1]=v, color[1][v][c1]=u;
		else
            dfs(0, u, v, c1, c2);
    }
	cout << cnt << "\n";
    for(int i = 1; i <= a; i++)
        for(int j = 1; j <= cnt; j++)
        	if(color[0][i][j] != 0)
            	ans[id[i][color[0][i][j]]] = j;
    for (int i = 1; i <= m; i++)
        cout << ans[i] << " ";
}
#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...