ÉèΪÊ×Ò³ ¼ÓÈëÊÕ²Ø

TOP

Íõ×ÓÑ¡¹«Ö÷½á»éPOJÎÊÌâ(Ò»)
2013-12-05 13:05:34 À´Ô´: ×÷Õß: ¡¾´ó ÖРС¡¿ ä¯ÀÀ:294´Î
Tags£ºÍõ×Ó ¹«Ö÷ ½á»é POJ ÎÊÌâ

    ÕâÁ½µÀÌâ²î²»¶à£¬POJÕâµÀÎҺܾÃÒÔǰ¾Í×ö¹ý£¬µ«ÊDZÈÈüµÄʱºò¾ÓȻûÏëÆðÀ´
    POJ ÕâµÀÌâµÄÌâÒâÊÇ£¬N¸öÍõ×Óÿ¸öÈ˶¼ÓÐϲ»¶µÄ¹«Ö÷£¬µ±ËûÃÇÑ¡¶¨Ò»¸ö¹«Ö÷½á»éʱ£¬±ØÐëÊǵÄʣϵÄÈËÒ²ÄÜÕÒµ½Ëûϲ»¶µÄ¹«Ö÷½á»é¡£
    ˼·£¬Ê×ÏȶÔÓÚÍõ×Ó£¬¶ÔÓÚÿһ¸öËûϲ»¶µÄ¹«Ö÷£¬Ö±½ÓÁ¬±ß£¬È»ºóÔÙ¸ù¾ÝÒѾ­¸ø³öµÄÆ¥Åä·½°¸£¬½¨Á¢¹«Ö÷->Íõ×ӵıߡ£
    ×îºóÇó³öSCCºóÔÚͬһǿÁªÍ¨·ÖÁ¿ÀïµÄÍõ×Ӻ͹«Ö÷¾Í¿ÉÒÔÁË¡£
    ´úÂë¾Í²»ÌùÁË
    ÏÂÃæÔÙ½²Ò»ÏÂHDU 4685ÕâµÀÌ⣬Á½µÀÌâµÄÎ¨Ò»Çø±ð¾ÍÊÇ£¬ÉÏÒ»µÀÌ⣬ÿ¸ö¹«Ö÷µ½Íõ×ӵį¥Åä·½°¸¶¼ÊǸø³öµÄ£¬ÊÇÒ»¶¨´æÔڵģ¬ÄÇÊÇÒòΪ¹«Ö÷ºÍÍõ×ӵĸöÊýÊÇÏàͬµÄ¡£
    µ«ÊÇÕâµÀÌ⹫Ö÷ºÍÍõ×ӵĸöÊý²»Í¬£¬¾ÍÎÞ·¨×öµ½Á½Á½Æ¥Å䣬±ØÈ»´æÔÚ¹â¹÷µÄÇé¿ö¡£
    ¹â¹÷ÆäʵͦÕý³£µÄ£¬µ«ÊǶÔÓÚÕâµÀÌ⣬ÎÒÃǾÍÐèÒªÐéÄâһЩÍõ×Ӻ͹«Ö÷³öÀ´¡£
    Ò»¸öÍõ×ÓûÓÐÆ¥ÅäµÄ»°£¬ÄÇôÐéÄâÒ»¸ö¹«Ö÷³öÀ´£¬±íʾËùÓеÄÍõ×Ó¶¼Ï²»¶Õâ¸ö¹«Ö÷£¬Í¬ÀíÐéÄâ³öÍõ×ÓµÄÇé¿ö¡£
    ÄÇôÔÚÇó³öÆ¥ÅäÖ®ºó£¬ÎÒÃǾͿÉÒÔ¸ù¾ÝÕâЩƥÅäÀ´½¨Á¢¹«Ö÷->Íõ×ӵıߣ¬È»ºó²Ù×÷¾ÍºÍÉÏÒ»ÌâÒ»ÑùÁË¡£
    ´úÂ룺
    #include <set>
    #include <map>
    #include <stack>
    #include <cmath>
    #include <queue>
    #include <cstdio>
    #include <string>
    #include <vector>
    #include <iomanip>
    #include <cstring>
    #include <iostream>
    #include <algorithm>
    #include <ctime>
    #define Max 2505
    #define FI first
    #define SE second
    #define ll long long
    #define PI acos£¨-1.0£©
    #define inf 0x3fffffff
    #define LL£¨x£© £¨ x ¡¶ 1 £©
    #define bug puts£¨"here"£©
    #define PII pair<int,int>
    #define RR£¨x£© £¨ x ¡¶ 1 | 1 £©
    #define mp£¨a,b£© make_pair£¨a,b£©
    #define mem£¨a,b£© memset£¨a,b,sizeof£¨a£©£©
    #define REP£¨i,s,t£© for£¨ int i = £¨ s £© ; i <= £¨ t £© ; ++ i £©
    using namespace std;
    inline void RD£¨int &ret£© {
    char c;
    int flag = 1 ;
    do {
    c = getchar£¨£©£»
    if£¨c == '-'£©flag = -1 ;
    } while£¨c < '0' || c > '9'£© ;
    ret = c - '0';
    while£¨£¨c=getchar£¨£©£© >= '0' && c <= '9'£©
    ret = ret * 10 + £¨ c - '0' £©£»
    ret *= flag ;
    }
    inline void OT£¨int a£© {
    if£¨a >= 10£©OT£¨a / 10£© ;
    putchar£¨a % 10 + '0'£© ;
    }
    inline void OT£¨double a£© {
    char x[111] ;
    sprintf£¨x , "%f" , a£© ;
    printf£¨"%s\n",x£© ;
    }
    inline void RD£¨double &ret£© {
    char c ;
    int flag = 1 ;
    do {
    c = getchar£¨£© ;
    if£¨c == '-'£©flag = -1 ;
    } while£¨c < '0' || c > '9'£© ;
    ll fuck1 = c - '0' ;
    while£¨£¨c = getchar£¨£©£© >= '0' && c <= '9'£© {
    fuck1 = fuck1 * 10 + c - '0' ;
    }
    ll fuck2 = 1 ;
    while£¨£¨c = getchar£¨£©£© >= '0' && c <= '9'£© {
    fuck1 = fuck1 * 10 + c - '0' ;
    fuck2 *= 10 ;
    }
    ret = flag * £¨double£©fuck1 / £¨double£©£¨fuck2£© ;
    }
    /***************************************************/
    #define N 2005
    int n , m ;
    int fk[N] ;
    int vis[N] ;
    struct kdq {
    int s , e , next ;
    } ed[N * N] ;
    int head[N] , num = 0 ;
    int nn ;
    int linkx[N] ,linky[N] ;
    vector<int>G[N] ;
    void add£¨int s ,int e£© {
    ed[num].s = s ;
    ed[num].e = e ;
    ed[num].next = head[s] ;
    head[s] = num ++ ;
    }
    int dfs£¨int now£© {
    int sz = G[now].size£¨£© ;
    for £¨int i = 0 ; i < sz ; i ++ £© {
    int e = G[now][i] ;
    if£¨£¡vis[e]£© {
    vis[e] = 1 ;
    if£¨linky[e] == -1 || dfs£¨linky[e]£©£© {
    linky[e] = now ;
    linkx[now] = e ;
    return 1 ;
    }
    }
    }
    return 0 ;
    }
    //tarjan_define
    int low[N] , dfn[N] , st[N] , belong[N] ;
    int top , dp ,SCC ;
    void tarjan£¨int now£© {
    vis[now] = 1 ;
    st[top ++ ] = now ;
    dfn[now] = low[now] = dp ++ ;
    for £¨int i = head[now] ; i != -1 ; i = ed[i].next £© {
    int v = ed[i].e ;
    if£¨dfn[v] == -1£© {
    tarjan£¨v£© ;
    low[now] = min£¨low[now] ,low[v]£© ;
    } else if£¨vis[v]£© {
    low[now] = min£¨low[now] ,dfn[v]£© ;
    }
    }
    if£¨low[now] == dfn[now]£© {
    int xx ;
    SCC ++ ;
    do {
    xx = st[-- top ] ;
    vis[xx] = 0 ;
    belong[xx] = SCC ;
    } while£¨xx != now£© ;
    }
    }
    //init
    void init£¨£© {
    mem£¨linkx ,-1£© ;
    mem£¨linky ,-1£© ;
    mem£¨vis, 0£© ;
    mem£¨low,0£© ;
    mem£¨dfn ,-1£© ;
    mem£¨st ,0£© ;
    mem£¨head ,-1£© ;
    num = top = dp = SCC = 0 ;
    }
    int main£¨£© {
    int T ;
    #ifndef ONLINE_JUDGE
    freopen£¨"D:\\fuck.txt","r",stdin£© ;
    #endif
    cin ¡· T ;
    int ca = 0 ;
    while£¨T -- £© {
    RD£¨n£© ;
    RD£¨m£© ;
    int nfk = max£¨m , n£© ;
    init£¨£© ;
    for £¨int i = 0 ; i <= N ¡· 1 ; i ++ £© {
    G[i].clear£¨£© ;
    }
    REP£¨i , 1 , n £© {
    int x ;
    RD£¨x£© ;
    while£¨x -- £© {
    int y ;
    RD£¨y£© ;
    add£¨i , nfk + y£© ;
    G[i].push_back£¨nfk + y£© ;
    }
    }
    nn = 0 ;
    for £¨int i = 1 ; i <= nfk ; i ++ £© {
    mem£¨vis ,0£© ;
    nn += dfs£¨i£© ;
    }
    nn = 2 * nfk ;
    for £¨int i = 1 ; i <= nfk ; i ++ £© { //ÐéÄ⹫Ö÷
    if£¨linkx[i] == -1£© {
    linkx[i] = ++ nn ;
    linky[nn] = i ;

   

Ê×Ò³ ÉÏÒ»Ò³ 1 2 3 4 5 ÏÂÒ»Ò³ βҳ 1/5/5
¡¾´ó ÖРС¡¿¡¾´òÓ¡¡¿ ¡¾·±Ìå¡¿¡¾Í¶¸å¡¿¡¾Êղء¿ ¡¾ÍƼö¡¿¡¾¾Ù±¨¡¿¡¾ÆÀÂÛ¡¿ ¡¾¹Ø±Õ¡¿ ¡¾·µ»Ø¶¥²¿¡¿
·ÖÏíµ½: 
ÉÏһƪ£º¶Ôÿ¸ö±¦²Ø½øÐÐÒ»´ÎSPFA ÏÂһƪ£º²»¶¨¸ù×îСÊ÷ÐÎͼʵÀý·ÖÎö

ÆÀÂÛ

ÕÊ¡¡¡¡ºÅ: ÃÜÂë: (ÐÂÓû§×¢²á)
Ñé Ö¤ Âë:
±í¡¡¡¡Çé:
ÄÚ¡¡¡¡ÈÝ:

¡¤Linuxϵͳ¼ò½é (2025-12-25 21:55:25)
¡¤Linux°²×°MySQL¹ý³Ì (2025-12-25 21:55:22)
¡¤Linuxϵͳ°²×°½Ì³Ì£¨ (2025-12-25 21:55:20)
¡¤HTTP Åc HTTPS µÄ²î„ (2025-12-25 21:19:45)
¡¤ÍøÕ¾°²È«±ØÐ޿ΣºÍ¼ (2025-12-25 21:19:42)