1. 程式人生 > >[BZOJ 3108] 圖的逆變換

[BZOJ 3108] 圖的逆變換

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] 圖的逆變換