hdu 5961 傳遞(傳遞關係判斷)
阿新 • • 發佈:2018-12-16
傳遞關係 存在a->b b->c則定存在a->c
#include<bits/stdc++.h> using namespace std; vector<int>p1[3333]; vector<int>p2[3333]; char ma[3333][3333]; int main(){ int t; cin>>t; while(t--) { int n; cin>>n; char s[3333]; for(int i=1;i<=n;i++) { p1[i].clear(); p2[i].clear(); } for(int i=0;i<n;i++) { scanf("%s",ma[i]); for(int j=0;j<n;j++) { if(ma[i][j]=='P') { p1[i+1].push_back(j+1); } if(ma[i][j]=='Q') { p2[i+1].push_back(j+1); } } } int f1=0; int f2=0; for(int i=1;i<=n;i++) { for(int j=0;j<p1[i].size();j++) { for(int k=0;k<p1[p1[i][j]].size();k++) { if(ma[i-1][p1[p1[i][j]][k]-1]!='P') { f1=1; break; } } if(f1)break; } if(f1)break; } for(int i=1;i<=n;i++) { for(int j=0;j<p2[i].size();j++) { for(int k=0;k<p2[p2[i][j]].size();k++) { if(ma[i-1][p2[p2[i][j]][k]-1]!='Q') { f2=1; break; } } if(f2)break; } if(f2)break; } if(!f1&&!f2) { cout<<"T"<<endl; } else cout<<"N"<<endl; } return 0; }