比如 1 2 3 4 5
除去3就是 3 1 2 4 5
本题是给若干个除去某个数外的顺序,让判断这些顺序是否唯一。
这些顺序是确定的,即前后关系定好了,我们可以建有向图,然后拓扑排序。
如果唯一,是可以排完的。
如果不唯一,即前后关系不唯一,就会出现环,入度消不掉无法排完序。
所以判断记录排的数cnt是否是总数n即可。
int arr[200005];
void solve()
{
int n, k;
cin >> n >> k;
vector<int>rudu(n + 1);//,chudu(n+1);
vector<vector<int>>pre(n + 1);
for (int i = 1; i <= k; i++)
{
cin >> arr[1];
for (int j = 2; j <= n; j++)
{
cin >> arr[j];
if (j > 2)
{
rudu[arr[j - 1]]++;
//chudu[arr[j]]++;
pre[arr[j]].push_back(arr[j - 1]);
}
}
}
int cnt = 0;
queue<int>q;
for (int j = 1; j <= n; j++)
{
if (rudu[arr[j]] == 0)
{
q.push(arr[j]);
cnt++;
}
}
while (q.size())
{
int aim = q.front();
q.pop();
for (auto x : pre[aim])
{
rudu[x]--;
if (rudu[x] == 0)
{
q.push(x);
cnt++;
}
}
}
if (cnt == n)
cout << "YES" << endl;
else
cout << "NO" << endl;
}
signed main()
{
ios::sync_with_stdio(false); cin.tie(0); cout.tie(0);
int t = 1;
cin >> t;
while (t--)
{
solve();
}
return 0;
}