uva11175
題意:D圖是一個有向圖,E圖是D圖的邊作為點連接起來的有向圖。給定一個E圖判斷是否可以變成D圖。
分析:又是找特殊方法。網(wǎng)上給的方法是對于E圖來說,有兩個點都指向k點,那么這兩個點只有一個指向下一個點,那么這個E圖就不能轉(zhuǎn)換。這個是可以證明的。
#include<iostream> #include<string.h> #include<sstream> #include<set> #include<algorithm> #include<vector> #include<map> #include<queue> #include<math.h> using namespace std; int mp[300 + 10][300 + 10]; int n, m; bool judge() {for (int i = 0; i < n; i++) {for (int j = 0; j < n; j++) {int ok1 = 0, ok2 = 0;for (int k = 0; k < n; k++) {if (mp[i][k] && mp[j][k])ok1 = 1;if (mp[i][k] ^ mp[j][k])ok2 = 1;}if (ok1&&ok2)return true;}}return false; } int main() {int kase;cin >> kase;int t = 0;while (kase-- > 0) {memset(mp, 0, sizeof(mp));cin >> n >> m;int k1, k2;for (int i = 0; i < m; i++) { cin >> k1 >> k2; mp[k1][k2] = 1;}cout << "Case #" << ++t << ": ";if (judge())cout << "No" << endl;else cout << "Yes" << endl;}return 0; }?
總結(jié)