[BZOJ 3108] 圖的逆變換
阿新 • • 發佈:2018-06-28
bit 教你 name c++ pan namespace () 發現 nbsp
Link:
BZOJ 3108 傳送門
Solution:
樣例教你做題系列
觀察第三個輸出為No的樣例,發現只要存在$edge(i,k),edge(j,k)$,那麽$i,j$的出邊一定要全部相同
於是判斷有相同出邊的$i,j$是否有$edge(i,p)$但沒有$edge(j,p)$即可判斷是否輸出No
Code:
#include <bits/stdc++.h> using namespace std; const int MAXN=305; int n,m,x,y,T,e[MAXN][MAXN]; bool solve() { for(int i=1;i<=n;i++)for(int j=i+1;j<=n;j++) { bool f=false; for(int k=1;k<=n;k++) if(e[i][k]&&e[j][k]) f=true; if(!f) continue; for(int k=1;k<=n;k++) if(e[i][k]+e[j][k]==1) return false; } return true; } int main() { scanf("%d",&T);while(T--) { memset(e,0,sizeof(e)); scanf("%d%d",&n,&m); for(int i=1;i<=m;i++) scanf("%d%d",&x,&y),e[x+1][y+1]=true; if(solve()) puts("Yes"); else puts("No"); } return 0; }
[BZOJ 3108] 圖的逆變換