王子选公主结婚POJ问题(三)

2013-12-05 13:05:34 · 作者: · 浏览: 319


    for (int j = 1 ; j <= nfk ; j ++ ) { //所有王子都喜欢这个公主
    add(j , nn) ;
    }
    }
    add(linkx[i] , i) ;
    }
    for (int i = nfk + 1 ; i <= nfk 《 1 ; i ++ ) { //虚拟王子
    if(linky[i] == -1) {
    linkx[++ nn] = i ;
    linky[i] = nn ;
    for (int j = nfk + 1 ; j <= nfk + nfk ; j ++ ) { //这个王子喜欢所有公主
    add(nn , j) ;
    }
    }
    add(i , linky[i]) ;
    }
    mem(vis, 0) ;
    for (int i = 1 ; i <= nn ; i ++ ) {
    if(dfn[i] == -1)tarjan(i) ;
    }

    printf("Case #%d:\n",++ ca) ;
    set<int>fk ;
    __typeof(fk.begin()) it ;
    for (int i = 1 ; i <= n ; i ++ ) {
    fk.clear() ;
    for (int j = head[i] ; ~j ; j = ed[j].next ) {
    int x = belong[i] ;
    int y = belong[ed[j].e] ;
    if(x == y && ed[j].e <= nfk + m) {
    fk.insert(ed[j].e - nfk) ;
    }
    }
    printf("%d",fk.size()) ;
    for (it = fk.begin() ; it != fk.end() ; it ++) {
    printf(" %d",*it) ;
    }
    puts("") ;
    }
    }
    return 0 ;
    }