Cod sursa(job #2984732)

Utilizator Ilie_MityIlie Dumitru Ilie_Mity Data 24 februarie 2023 18:57:01
Problema Party Scor 30
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.17 kb
//Ilie Dumitru
#include<cstdio>
#include<vector>
#include<algorithm>
const int NMAX=128;

std::vector<int> G[NMAX<<1], toAdd[2], sol;
unsigned long long int visited[(NMAX>>6)+3];
int N, M;

void dfs(int node)
{
	if(!(visited[(node%N)>>6]&(1<<((node%N)&63))))
	{
		toAdd[node/N].push_back(node%N);
		visited[(node%N)>>6]|=1<<((node%N)&63);

		int i;
		for(i=0;i<(int)G[node].size();++i)
			dfs(G[node][i]);
	}
}

int main()
{
	FILE* f=fopen("party.in", "r"), *g=fopen("party.out", "w");
	int i, a, b, c;

	fscanf(f, "%d%d", &N, &M);

	for(i=0;i<M;++i)
	{
		fscanf(f, "%d%d%d", &a, &b, &c);
		--a;
		--b;
		switch(c)
		{
		case 0:
			G[a].push_back(b+N);
			G[b].push_back(a+N);
			break;
		case 1:
			G[a].push_back(b);
			G[b+N].push_back(a+N);
			break;
		case 2:
			G[b].push_back(a);
			G[a+N].push_back(b+N);
			break;
		case 3:
			G[a+N].push_back(b);
			G[b+N].push_back(a);
			break;
		}
	}

	for(i=0;i<N;++i)
		dfs(i+N);

	std::sort(toAdd[1].begin(), toAdd[1].end());

	fprintf(g, "%d\n", (int)toAdd[1].size());
	for(i=0;i<(int)toAdd[1].size();++i)
		fprintf(g, "%d\n", toAdd[1][i]+1);

	fclose(f);
	fclose(g);
	return 0;
}