#include<bits/stdc++.h>
using namespace std;
vector<int> kraw[1001];
vector<int> nie[1001], tak[1001];
vector<int> pom;
int wyn[1001], zle[1001], czy=1;
char s[3];
int ile=0;
int odw[1001];
void dfs(int x, int il)
{
	odw[x]=0;
	pom.push_back(x);
	for(int i=0; i<int(kraw[x].size()); i++)
		if(odw[kraw[x][i]]==il)
			dfs(kraw[x][i], il);
}
void licz(vector<int> w, int ojc)
{
//	printf("%d\n", ojc);
	if(w.size()==0)
		return;
	ile++;
	int ojciec=0;
	for(int i=0; i<int(w.size()); i++)
	{
		for(int j=0; j<int(nie[w[i]].size()); j++)
			zle[nie[w[i]][j]]=ile;
	}
	for(int i=0; i<int(w.size()); i++)
		odw[w[i]]=ile;
	for(int i=0; i<int(w.size()); i++)
	{
		for(int j=0; j<int(tak[w[i]].size()); j++)
			if(odw[tak[w[i]][j]]==ile)
				zle[w[i]]=ile;
	}
	for(int i=0; i<int(w.size()); i++)
		if(zle[w[i]]!=ile)
			ojciec=w[i];
	if(ojciec==0)
	{
		czy=0;
		return;
	}
	wyn[ojciec]=ojc;
	int il=ile;
	
	odw[ojciec]=0;
	for(int i=0; i<int(w.size()); i++)
	{
		if(odw[w[i]]==il)
		{
			pom.clear();
			dfs(w[i], il);
			licz(pom, ojciec);
		}
		if(czy==0)
			return;
	}
}
int main()
{
	int n,m;
	scanf("%d%d", &n, &m);
	for(int i=1; i<=m; i++)
	{
		int x,y;
		scanf("%d%d%s", &x, &y, s);
		if(s[0]=='T')
		{
			tak[x].push_back(y);
			kraw[x].push_back(y);
			kraw[y].push_back(x);
		}
		if(s[0]=='N')
			nie[x].push_back(y);
	}
	for(int i=1; i<=n; i++)
		pom.push_back(i);
	licz(pom, 0);
	if(czy==0)
		printf("NIE\n");
	else
		for(int i=1; i<=n; i++)
			printf("%d\n", wyn[i]);
}
        | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 | #include<bits/stdc++.h> using namespace std; vector<int> kraw[1001]; vector<int> nie[1001], tak[1001]; vector<int> pom; int wyn[1001], zle[1001], czy=1; char s[3]; int ile=0; int odw[1001]; void dfs(int x, int il) { odw[x]=0; pom.push_back(x); for(int i=0; i<int(kraw[x].size()); i++) if(odw[kraw[x][i]]==il) dfs(kraw[x][i], il); } void licz(vector<int> w, int ojc) { // printf("%d\n", ojc); if(w.size()==0) return; ile++; int ojciec=0; for(int i=0; i<int(w.size()); i++) { for(int j=0; j<int(nie[w[i]].size()); j++) zle[nie[w[i]][j]]=ile; } for(int i=0; i<int(w.size()); i++) odw[w[i]]=ile; for(int i=0; i<int(w.size()); i++) { for(int j=0; j<int(tak[w[i]].size()); j++) if(odw[tak[w[i]][j]]==ile) zle[w[i]]=ile; } for(int i=0; i<int(w.size()); i++) if(zle[w[i]]!=ile) ojciec=w[i]; if(ojciec==0) { czy=0; return; } wyn[ojciec]=ojc; int il=ile; odw[ojciec]=0; for(int i=0; i<int(w.size()); i++) { if(odw[w[i]]==il) { pom.clear(); dfs(w[i], il); licz(pom, ojciec); } if(czy==0) return; } } int main() { int n,m; scanf("%d%d", &n, &m); for(int i=1; i<=m; i++) { int x,y; scanf("%d%d%s", &x, &y, s); if(s[0]=='T') { tak[x].push_back(y); kraw[x].push_back(y); kraw[y].push_back(x); } if(s[0]=='N') nie[x].push_back(y); } for(int i=1; i<=n; i++) pom.push_back(i); licz(pom, 0); if(czy==0) printf("NIE\n"); else for(int i=1; i<=n; i++) printf("%d\n", wyn[i]); } | 
 
            
         English
                    English