MakeBipartite

Time limit: 2s Memory limit: 512MB Input: makebipartite.in Output: makebipartite.out

Sile a învățat la ora de matematică definiția unui graf bipartit. Considerăm un graf neorientat GG format dintr-o mulțime de noduri VV și o mulțime de muchii EE. Spunem că GG este bipartit dacă și numai dacă există două submulțimi V1,V2⊆VV^1, V^2 \subseteq V astfel încât:

  • V1∩V2=∅V^1 \cap V^2 = \varnothing;
  • V1∪V2=VV^1 \cup V^2 = V;
  • fiecare muchie din EE are o extremitate în V1V^1 și o extremitate în V2V^2.


Sile a dat peste un graf neorientat GG, cu nodurile VV și muchiile EE, format din NN noduri (V={1,2,…,N}V = \{1, 2, \dots, N\}) și MM muchii (∣E∣=M|E| = M). El se întreabă acum pentru care noduri v∈Vv \in V avem că graful G∖vG \setminus v obținut prin eliminarea nodului vv și a muchiilor incidente lui vv din GG este bipartit.

Voi va trebui să îl ajutați pe Sile să își rezolve problema pentru TT scenarii.

Protocol de interacțiune

Concurentul trebuie să implementeze următoarea funcție, care va fi apelată pentru TT scenarii independente:

void solve(int N, int M, int* X, int* Y, char* S);

NN reprezintă numărul de noduri ale grafului, MM numărul de muchii ale grafului. XX și YY sunt două șiruri de lungime MM ce codifică mulțimea de muchii a grafului: pentru fiecare 0≤i<M0 \leq i < M există o muchie între XiX_i și YiY_i. Concurentul trebuie să scrie răspunsul în șirul SS de lungime NN: pentru 0≤i<N0 \leq i < N vom avea că Si=S_i = 1 dacă graful G∖{i+1}G \setminus \{i+1\} este bipartit, și Si=S_i = 0 altfel. Valorile scrise în SS sunt caractere, nu numere.

Restricții

  • Nu vor exista muchii cu a=ba = b.
  • Nu vor exista muchii care să apară de mai multe ori în cadrul aceluiași scenariu.
  • Se consideră identice muchiile (a,b)(a, b) și (b,a)(b, a).

Subtask 1 (23 puncte)

  • 1≤T≤6001 \leq T \leq 600
  • 1≤N≤2 0001 \leq N \leq 2\ 000
  • 1≤M≤5 0001 \leq M \leq 5\ 000
  • Suma valorilor NN nu va depăși 20 00020\ 000.
  • Suma valorilor MM nu va depăși 20 00020\ 000.

Subtask 2 (32 puncte)

  • 1≤T≤20 0001 \leq T \leq 20\ 000
  • 1≤N≤100 0001 \leq N \leq 100\ 000
  • 1≤M≤250 0001 \leq M \leq 250\ 000
  • Suma valorilor NN nu va depăși 120 000120\ 000.
  • Suma valorilor MM nu va depăși 350 000350\ 000.
  • Se acordă punctaj complet oricărei surse care găsește răspunsul corect cel puțin pentru nodurile v∈Vv \in V pentru care există maxim două muchii incidente în GG. Cu toate acestea, se cere ca valorile SiS_i să fie mereu 0 sau 1 pentru 0≤i<N0 \leq i < N.

Subtask 3 (22 puncte)

  • 1≤T≤20 0001 \leq T \leq 20\ 000
  • 1≤N≤100 0001 \leq N \leq 100\ 000
  • 1≤M≤250 0001 \leq M \leq 250\ 000
  • Suma valorilor NN nu va depăși 120 000120\ 000.
  • Suma valorilor MM nu va depăși 350 000350\ 000.

Subtask 4 (23 puncte)

  • 1≤T≤40 0001 \leq T \leq 40\ 000
  • 1≤N≤1 000 0001 \leq N \leq 1\ 000\ 000
  • 1≤M≤2 500 0001 \leq M \leq 2\ 500\ 000
  • Suma valorilor NN nu va depăși 1 000 0001\ 000\ 000.
  • Suma valorilor MM nu va depăși 2 500 0002\ 500\ 000.

Exemplu

Apelurile comisiei Efect
solve(4, 3, {1,1,2}, {2,3,3}, S) S=S = 1110
solve(6, 7, {1,1,2,2,4,4,5}, {2,3,3,4,5,6,6}, S) S=S = 000000

Explicație

Avem T=2T = 2 scenarii de rezolvat.

În primul scenariu graful GG este cel din imaginea de mai jos.

Observăm că nodurile 11, 22 și 33 sunt vecine două câte două, de unde deducem că graful GG nu este bipartit. Prin eliminarea oricăruia dintre nodurile 11, 22 sau 33, graful rezultat va fi bipartit. De exemplu, dacă am elimina nodul 22 (implicit și muchiile sale incidente 2–12 – 1 și 2–32 – 3), atunci graful rezultat G∖{2}G \setminus \{2\} va fi bipartit, deoarece se pot alege submulțimile V1={1,4}V^1 = \{1, 4\} și V2={3}V^2 = \{3\} respectând proprietățile din enunț (n.b. există și alte modalități de a alege mulțimile V1V^1, V2V^2). Eliminarea nodului 44 nu ar duce la un graf bipartit. Așadar, răspunsul pentru acest scenariu este 1110.

În al doilea scenariu graful GG este cel din imaginea de mai jos.

În acest caz, indiferent ce nod v∈Vv \in V s-ar elimina din GG, graful rezultat G∖{v}G \setminus \{v\} nu ar fi bipartit. Așadar, răspunsul în acest caz este 000000.

Log in or sign up to be able to send submissions!