#include #include #include #include struct otrok { bool skupina; bool določeno; struct otrok ** povezave; long povezave_sizeof; long povezave_length; }; int main (void) { long n, m; // št. otrok in št. klepetavih parov scanf("%ld %ld\n", &n, &m); struct otrok * otroci = (struct otrok *) calloc(n, sizeof *otroci); assert(otroci); for (long i = 0; i < n; i++) assert((otroci[i].povezave = (struct otrok **) malloc((otroci[i].povezave_sizeof = 1)*sizeof *(otroci[i].povezave)))); for (long i = 0; i < m; i++) { int a, b; scanf("%d %d\n", &a, &b); a--; b--; // kaj ko bi začeli šteti z 0? ZAKAJ PA NE ZAČNEMO ŠTETI Z -1 ?=!?!?! if (otroci[a].povezave_sizeof <= otroci[a].povezave_length) assert((otroci[a].povezave = (struct otrok **) reallocarray(otroci[a].povezave, (otroci[a].povezave_sizeof *= 2), sizeof *(otroci[a].povezave)))); if (otroci[b].povezave_sizeof <= otroci[b].povezave_length) assert((otroci[b].povezave = (struct otrok **) reallocarray(otroci[b].povezave, (otroci[b].povezave_sizeof *= 2), sizeof *(otroci[b].povezave)))); otroci[a].povezave[otroci[a].povezave_length++] = otroci+b; otroci[b].povezave[otroci[b].povezave_length++] = otroci+a; } struct otrok ** za_obdelati = (struct otrok **) malloc(n*sizeof*za_obdelati); assert(za_obdelati); long za_obdelati_length = 0; for (long i = 0; i < n; i++) { if (!otroci[i].določeno) { // prvi v komponenti dobi nižjo skupino otroci[i].skupina = 0; otroci[i].določeno = true; za_obdelati[za_obdelati_length++] = otroci+i; } while (za_obdelati_length) { struct otrok * obdelujem = za_obdelati[--za_obdelati_length]; for (long j = 0; j < obdelujem->povezave_length; j++) { if (obdelujem->povezave[j]->določeno) { if (obdelujem->povezave[j]->skupina == obdelujem->skupina) { printf("-1\n"); goto e; } continue; } obdelujem->povezave[j]->skupina = !obdelujem->skupina; obdelujem->povezave[j]->določeno = true; za_obdelati[za_obdelati_length++] = obdelujem->povezave[j]; } } } for (long i = 0; i < n; i++) printf("%ld\n", ((long) (otroci[i].skupina)) + 1); e: for (long i = 0; i < n; i++) free(otroci[i].povezave); // make asan happy free(za_obdelati); free(otroci); return 0; }