제출 #660501

#제출 시각아이디문제언어결과실행 시간메모리
660501Chal1shkanKutije (COCI21_kutije)C++14
70 / 70
195 ms30924 KiB
# include <iostream>
# include <iomanip>
# include <algorithm>
# include <cmath>
# include <queue>
# include <map>
# include <set>
# include <cstring>

# define pb push_back
# define ff first
# define ss second
# define nl "\n"
# define pii pair <int, int>
# define pll pair <ll, ll>
  
typedef long long ll;
typedef unsigned long long ull;
typedef long double ld;
  
const ll maxn = 1e3 + 25;
const ll maxl = 20 + 0;
const ll inf = 2e9 + 0;
const ll mod = 998244353;

using namespace std;

int n, m, q;
int p[maxn][maxn];
bool ok[maxn][maxn];
vector <ll> g[maxn];
vector <ll> gr[maxn];
bool used[maxn];
vector <ll > order;
ll comp[maxn];

void dfs1 (ll v)
{
	used[v] = 1;
	for (ll to : g[v])
	{
		if (!used[to])
		{
			dfs1(to);
		}
	}
	order.pb(v);
}

void dfs2 (ll v, ll cl)
{
	used[v] = 1;
	comp[v] = cl;
	for (ll to : gr[v])
	{
		if (!used[to])
		{
			dfs2(to, cl);
		}
	}
}

void ma1n ()
{
	cin >> n >> m >> q;
	for (int i = 1; i <= m; ++i)
	{
		for (int j = 1; j <= n; ++j)
		{
			cin >> p[i][j];
			g[j].pb(p[i][j]);
			gr[p[i][j]].pb(j);

		}
	}
	for (ll v = 1; v <= n; ++v)
	{
		if (!used[v])
		{
			dfs1(v);
		}
	}
	reverse(order.begin(), order.end());
	ll cl = 1;
	memset(used, 0, sizeof(used));
	for (ll v : order)
	{
		if (!used[v])
		{
			dfs2(v, cl++);
		}
	}
	while (q--)
	{
		ll a, b;
		cin >> a >> b;
		if (comp[a] == comp[b])
		{
			cout << "DA" << nl;
		}
		else
		{
			cout << "NE" << nl;
		}
	}
}

	
int main ()
{
    ios::sync_with_stdio(false);
    cin.tie(0); cout.tie(0);
    int ttt = 1;
//  cin >> ttt;
    for (int test = 1; test <= ttt; test++)
    {
//    	cout << "Case " << test << ":" << nl;
    	ma1n();
	}
    return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...