[CQOI2013]图的逆变换
#include <bits/stdc++.h>
using namespace std;
int T, n, m, e[305][305];
bool check() {
int f1 = 0, f2 = 0;
for (int i = 1; i < n; ++i)
for (int j = i + 1; j <= n; f1 = f2 = 0, ++j)
for (int k = 1; k <= n; ++k) {//k就是另外一个点
f1 |= e[i][k] && e[j][k], f2 |= e[i][k] ^ e[j][k];
if (f1 && f2)
return 0;
}
return 1;
}
int main() {
scanf("%d", &T);
while (T--) {
memset(e, 0, sizeof(e));
scanf("%d%d", &n, &m);
for (int i = 1, x, y; i <= m; ++i)
scanf("%d%d", &x, &y), e[x + 1][y + 1] = 1;
puts(check() ? "Yes" : "No");
}
return 0;
}
题解:
E中如果存在两条边ac−>cd和bc−>cd
那么ac能连出的点和bc能连出的点应该是相同的
因为在D中都表示从c连向另一个相同的点
题解链接