[Floyd-Washall] POJ 3660 Cow Contest

POJ 3660 Cow Contest

Floyd-Washall

const int MAX_N = 103;
const int INF = 0x3fffffff;
int N,M;
int W[MAX_N][MAX_N];
int D[MAX_N][MAX_N];
int tmpD[MAX_N][MAX_N];
void floyd(){
    // D_0 = W
    memcpy(D,W,sizeof(D));
    for(int k=1;k<=N;k++){
        for(int i=1;i<=N;i++){
            for(int j=1;j<=N;j++){
                tmpD[i][j] = min(D[i][j],D[i][k]+D[k][j]);
            }
        }
        memcpy(D,tmpD,sizeof(D));
    }
}
int main(){
    scanf("%d %d",&N,&M);
    /* initialize W: 
     * w_ij = 0					i=j
     *		= 有向边(i,j)的权重	i≠j且(i,j) in E
     * 		= INF				i≠j且(i,j) not in E
     */
    fill(W[0],W[0]+MAX_N*MAX_N,INF);
    for(int i=1;i<=N;i++) W[i][i]=0;
    for(int m=0;m<M;m++){
        int A,B;
        scanf("%d %d",&A,&B);
        W[A][B] = 1;
    }
    floyd();
    int ans=0;
    for(int i=1;i<=N;i++){
        int cnt=0;
        for(int j=1;j<=N;j++){
            if(D[i][j]!=0 && D[i][j]<INF) cnt++;
            if(D[j][i]!=0 && D[j][i]<INF) cnt++;
        }
        if(cnt==N-1) ans++;
    }
    printf("%d\n", ans);
}

posted @ 2021-03-27 11:49  JhengWei  阅读(49)  评论(0编辑  收藏  举报