1. 程式人生 > >hdu 4324 Triangle LOVE 拓撲排序

hdu 4324 Triangle LOVE 拓撲排序

clu ring ng- Language rip processor ++ ret amp

#include<stdio.h>
#include<stack>
#include<string.h>
#include<algorithm>
using namespace std;

int mp[2000 + 5][2000 + 5], in[2000 + 5],u[2000+5];
int main()
{
    int _, i, j, k, n, cas = 0,t;
    char s[2000 + 5];
    bool flag;
    scanf("%d", &_);
    while (_--)
    {
        memset
(mp, 0, sizeof(mp)); memset(in,0,sizeof(in)); memset(u,0,sizeof(u)); scanf("%d", &n); flag=0; for (i = 0; i < n; i++) { scanf("%s", s); for (j = 0; j < n; j++) { if (s[j] == ‘1‘) { mp[i][j] = 1
; in[j]++; } } } stack<int>s; while(!s.empty()) s.pop(); for(i=0;i<n;i++) { if(in[i]==0) s.push(i); } while(!s.empty()) { t=s.top(); u[t]=1
; s.pop(); for(i=0;i<n;i++) { if(mp[t][i]) { in[i]--; if(in[i]==0) s.push(i); } } } for (i = 0; i < n; i++) { if(u[i]) continue; for (k = i+1; k < n; k++) { if(u[k]) continue; if (!mp[i][k]||mp[k][i]) continue; for (j = 0; j < n; j++) { if(u[j]) continue; if (mp[k][j] && mp[j][i]&&!mp[j][k]&&!mp[i][j]) { flag = 1; break; } } if (flag) break; } if (flag) break; } if (!flag) printf("Case #%d: No\n", ++cas); else printf("Case #%d: Yes\n", ++cas); } return 0; }

hdu 4324 Triangle LOVE 拓撲排序