I mange deler av Russland snør det om vinteren. Det er $N$ byer i Russland, nummerert fra $0$ til $N-1$. Det er $N-1$ veier, nummerert fra $0$ til $N-2$. Vei $i$ ($0 \le i \le N-2$) forbinder to ulike byer $A_i$ og $B_i$ ($0 \le A_i < B_i \le N-1$) i begge retninger. Det er mulig å reise mellom hvilke som helst to ulike byer i Russland ved å følge en sekvens av veier.
Snøforholdene på hver vei endrer seg fra dag til dag. På en gitt dag er hver vei enten snødekt eller ikke snødekt. Snøforholdene på en vei endrer seg ikke i løpet av én enkelt dag.
Anya og Boris jobber i det russiske samferdselsdepartementet. Anya jobber i avdelingen for veiinformasjon, og Boris jobber i avdelingen som svarer på spørsmål fra innbyggerne. Et spørsmål fra en innbygger er: «Hva er det minste antallet snødekte veier jeg må kjøre gjennom for å reise fra hovedstaden, by 0, til en bestemt annen by?» Boris svarer vanligvis innbyggerne etter å ha mottatt et spørsmål og kommunisert med Anya.
Nylig arrangeres en verdenskonkurranse i programmering i Russland over $Q$ dager. Under konkurransen forventes det at kommunikasjonslinjene vil være overbelastet, noe som gjør det vanskelig for Anya og Boris å kommunisere direkte. Derfor har Anya og Boris bestemt seg for å kommunisere på følgende måte:
- På begynnelsen av hver dag mottar Anya informasjonen om snødekte veier for den dagen og sender data til en reléserver.
- Når Boris mottar et spørsmål fra en innbygger, svarer han på det ved å kommunisere med reléserveren.
Det er imidlertid følgende begrensninger på kommunikasjonen mellom Anya og Boris:
- Kapasiteten til reléserveren er $L = 1000$ biter. Anya kan lagre høyst $L$ biter med informasjon på reléserveren.
- Dataene som er lagret på reléserveren, nullstilles til bare 0-ere på begynnelsen av hver dag.
- Boris kan lese 1 spesifisert bit med informasjon ved å interagere med reléserveren én gang.
- For å svare på et spørsmål kan Boris interagere med reléserveren høyst 20 ganger per spørsmål.
Du, en bekjent av direktøren for samferdselsdepartementet, har blitt bedt om å utarbeide en strategi for Anya og Boris.
Skriv et program som implementerer en strategi for Anya og Boris som kan svare riktig på innbyggernes spørsmål.
Implementasjonsdetaljer
Du må sende inn to filer i samme programmeringsspråk.
Den første filen heter Anya.c eller Anya.cpp. Denne filen implementerer Anyas strategi og må implementere følgende to rutiner. Programmet må inkludere Anyalib.h.
void InitAnya(int N, int A[], int B[])Denne funksjonen kalles nøyaktig én gang for hvert testtilfelle.- Argumentet
Nrepresenterer antallet byer. - Argumentene
A[]ogB[]er tabeller med lengde $N-1$, som representerer informasjonen om veiforbindelsene. ElementeneA[i]ogB[i]($0 \le i \le N-2$) er heltall som representerer at vei $i$ forbinder byeneA[i]ogB[i]i begge retninger, og tilfredsstiller $0 \le A[i] < B[i] \le N-1$.
- Argumentet
void Anya(int C[])Denne funksjonen kalles $Q$ ganger etter atInitAnyaer kalt. Denne funksjonen tilsvarer at Anya bestemmer bitstrengen som skal lagres på reléserveren etter at informasjonen om snødekte veier er oppdatert på begynnelsen av dagen.- Argumentet
C[]er en tabell med lengde $N-1$, som representerer informasjonen om snødekte veier. ElementetC[i]($0 \le i \le N-2$) er et heltall på 0 eller 1, derC[i] = 1betyr at vei $i$ er snødekt, ogC[i] = 0betyr at vei $i$ ikke er snødekt.
- Argumentet
Inne i funksjonen Anya kan du kalle følgende funksjon:
void Save(int place, int bit)Denne funksjonen representerer operasjonen der Anya lagrer en bit på reléserveren.- Argumentet
placerepresenterer posisjonen der biten skal skrives.placemå være et heltall mellom $0$ og $L-1$ (inkludert). Hvis en verdi utenfor dette intervallet oppgis, bedømmes det som Wrong Answer [1]. I hvert kall til funksjonenAnyakan du heller ikke kalle denne funksjonen med sammeplace-argument mer enn én gang. Hvis den kalles to ganger med samme argument, bedømmes det som Wrong Answer [2]. - Argumentet
biter et heltall som representerer biten som skal skrives, som må være 0 eller 1. Hvis en annen verdi oppgis, bedømmes det som Wrong Answer [3].
- Argumentet
Etter Save-kallet blir innholdet i den place-te biten på reléserveren bit. Hvis et Save-kall bedømmes som Wrong Answer, avsluttes programmet der og da.
Umiddelbart før funksjonen Anya kalles, blir bitene på reléserveren alltid satt til bare 0-ere. Det vil si at på slutten av funksjonen Anya vil posisjoner der det ikke ble utført noen lagringsoperasjon med funksjonen Save, inneholde 0.
Den andre filen heter Boris.c eller Boris.cpp. Denne filen implementerer Boris' strategi og må implementere følgende to rutiner. Programmet må inkludere Borislib.h.
void InitBoris(int N, int A[], int B[])Denne funksjonen kalles nøyaktig én gang for hvert testtilfelle.- Argumentet
Nrepresenterer antallet byer. - Argumentene
A[]ogB[]er tabeller med lengde $N-1$, som representerer informasjonen om veiforbindelsene. ElementeneA[i]ogB[i]($0 \le i \le N-2$) er heltall som representerer at vei $i$ forbinder byeneA[i]ogB[i]i begge retninger, og tilfredsstiller $0 \le A[i] < B[i] \le N-1$.
- Argumentet
int Boris(int city)Denne funksjonen kalles flere ganger etter atInitBoriser kalt. Denne funksjonen tilsvarer Boris' handling som svar på et spørsmål fra en innbygger.- Argumentet
cityrepresenterer innbyggerens spørsmål.cityer et heltall mellom $1$ og $N-1$ (inkludert). Dette representerer at innbyggeren spør om det minste antallet snødekte veier vedkommende må kjøre gjennom for å reise fra by 0 tilcity. - Funksjonen
Borismå returnere et heltall mellom $0$ og $N-1$ (inkludert), som er svaret på innbyggerens spørsmål. Hvis et heltall utenfor dette intervallet returneres, bedømmes det som Wrong Answer [4]. Hvis svaret er feil, bedømmes det som Wrong Answer [7].
- Argumentet
Inne i funksjonen Boris kan du kalle følgende funksjon:
int Ask(int place)Denne funksjonen representerer operasjonen der Boris leser en bit fra reléserveren.- Argumentet
placerepresenterer posisjonen biten skal leses fra.placemå være et heltall mellom $0$ og $L-1$ (inkludert). Hvis en verdi utenfor dette intervallet oppgis, bedømmes det som Wrong Answer [5].
Returverdien til funksjonen
Asker et heltall som representerer innholdet i denplace-te biten på reléserveren, som er 0 eller 1. Videre kan funksjonenAskkalles høyst 20 ganger i hvert kall til funksjonenBoris. Hvis den kalles mer enn 20 ganger, bedømmes det som Wrong Answer [6].- Argumentet
Hvis et Ask-kall bedømmes som Wrong Answer, avsluttes programmet der og da.
Begrensninger
- $2 \le N \le 500$.
- $1 \le Q \le 500$.
- $0 \le A_i < B_i \le N-1$ ($0 \le i \le N-2$).
- $1 \le D_j$ ($1 \le j \le Q$).
- $D_1 + \dots + D_Q \le 500$.
- Det er mulig å reise mellom hvilke som helst to ulike byer ved å følge en sekvens av veier.
Deloppgaver
- (15 poeng) $N \le 20$.
- (5 poeng) $N \le 100$.
- (35 poeng) $A_i = i$ og $B_i = i + 1$ for alle $0 \le i \le N-2$.
- (45 poeng) Ingen ytterligere begrensninger.
Eksempler
Inndata 1
5 0 1 1 2 1 4 2 3 2 0101 3 2 4 3 1110 1 4
Utdata 1
1 0 2 2
Merk
Eksempelet ovenfor viser interaksjonsflyten. Den første linjen i inndataene er $N=5$. De neste 4 linjene definerer kantene. Neste linje er $Q=2$. De påfølgende linjene beskriver de snødekte veiene og spørringene for hver dag. Utdataene viser svarene gitt av Boris for spørringene på hver dag.