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

TOP

ÔÚÒ»ÕÅÓÐÏòͼÖÐÕÒ³ö×îС¾àÀë
2013-12-05 13:05:24 À´Ô´: ×÷Õß: ¡¾´ó ÖРС¡¿ ä¯ÀÀ:100´Î
Tags£ºÕÅÓÐ ÏòͼÖÐ ÕÒ³ö ×îС ¾àÀë
    ÌâÒ⣺¸øÄãÒ»ÕÅÓÐÏòͼ£¬ÎÊÊÇ·ñÄÜÕÒ³öÒ»¸öµã£¬Ê¹µÃËûµ½ËùÓеãµÄ¾àÀë×îС¡£
    ˼·£º»¹ÊDz»¶¨¸ù×îСÊ÷ÐÎͼ£¬ÐéÄâÒ»¸öS×÷Ϊ¸ù£¬ÓëËùÓеãÏàÁ¬£¬È»ºóÅÜÒ»±éÖìÁõËã·¨¡£
    ÖÁÓÚÕÒ³öÕâ¸öµã£¬ÎÒÃǽ«SÓëËùÓе㶼Á¬ÆðÀ´µÄʱºò£¬ÊÇ´ÓСµ½´óÁ¬µÄ¡£ËùÒÔÕâ¸ö±ßµÄ±àºÅÊÇ¿ÉÒÔ´ú±íµãµÄ±àºÅµÄ¡£
    ÀýÈçn = 4 , m = 3 .ÄÇôÔÚÔ­À´3Ìõ±ßµÄ»ù´¡ÉÏ£¬µÚ4Ìõ±ß¾ÍÊÇS->0 ,ͬÀíµÚnÌõ¡£
    ËùÒÔÔÚÕÒµãµÄʱºòÎÒÃÇ¿ÉÒÔÖ»¼Ç¼Õâ¸ö±ßµÄÐòºÅ£¬×îºóÊä³öµÄʱºò-m¾Í¿ÉÒÔÁË¡£
    #include <set>
    #include <map>
    #include <stack>
    #include <cmath>
    #include <queue>
    #include <cstdio>
    #include <string>
    #include <vector>
    #include <iomanip>
    #include <cstring>
    #include <iostream>
    #include <algorithm>
    #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;
    #define type ll
    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£© ;
    puts£¨x£© ;
    }
    inline void RD£¨double &ret£© {
    char c ;
    int flag = 1 ;
    do {
    c = getchar£¨£© ;
    if£¨c == '-'£©flag = -1 ;
    } while£¨c < '0' || c > '9'£© ;
    ll n1 = c - '0' ;
    while£¨£¨c = getchar£¨£©£© >= '0' && c <= '9'£© {
    n1 = n1 * 10 + c - '0' ;
    }
    ll n2 = 1 ;
    while£¨£¨c = getchar£¨£©£© >= '0' && c <= '9'£© {
    n1 = n1 * 10 + c - '0' ;
    n2 *= 10 ;
    }
    ret = flag * £¨double£©n1 / £¨double£©£¨n2£© ;
    }
    /*********************************************/
    #define N 1005
    #define M 10005
    int n , m , S ;
    struct ed{
    int s , e , l ;
    ed£¨£©{}
    ed£¨int _s ,int _e,int _l£©£ºs£¨_s£©£¬e£¨_e£©£¬l£¨_l£©{}
    }E[M] ,EE[M] ;
    int pre[N] , vis[N] , id[N] ;
    type in[N] ;
    int pos = -1 ;
    type Directed_MST£¨int root , int NV ,int NE£©{
    type ret = 0 ;
    bool flag = 0 ;
    while£¨1£©{
    //×îС±ß
    for £¨int i = 0 ; i < NV ; i ++ £©in[i] = inf ;
    for £¨int i = 0 ; i < NE ; i ++ £©{
    int s = E[i].s ;
    int e = E[i].e ;
    if£¨s != e && in[e] > E[i].l£©{
    in[e] = E[i].l ;
    pre[e] = s ;
    if£¨s == root£©{
    pos = i ;
    }
    }
    }
    for £¨int i = 0 ; i < NV ; i ++ £©{
    if£¨i == root£©continue ;
    if£¨in[i] == inf£©return -1 ;
    }
    int cntnode = 0 ;
    mem£¨vis , -1£© ;
    mem£¨id, -1£© ;
    in[root] = 0 ;
    //ÕÒ»·
    for £¨int i = 0 ; i < NV ; i ++ £©{
    ret += in[i] ;
    int v = i ;
    while£¨vis[v] != i && id[v] == -1 && v != root£©{
    vis[v] = i ;
    v = pre[v] ;
    }
    if£¨v != root && id[v] == -1£©{
    for £¨int u = pre[v] ; u != v ; u = pre[u]£©{
    id[u] = cntnode ;
    }
    id[v] = cntnode ++ ;
    }
    }
    if£¨cntnode == 0£©break ;
    //Ëõµã
    for £¨int i = 0 ; i < NV ; i ++ £©if£¨id[i] == -1£©id[i] = cntnode ++ ;
    for £¨int i = 0 ; i < NE ; i ++ £©{
    int s = E[i].s ;
    int e = E[i].e ;
    E[i].s = id[s] ;
    E[i].e = id[e] ;
    if£¨id[s] != id[e]£©{
    E[i].l -= in[e] ;
    }
    }
    NV = cntnode ;
    root = id[root] ;
    }
    return ret ;
    }
    int main£¨£© {
    int flag = 0 ;
    while£¨cin ¡· n ¡· m£©{
    int fk = m ;
    pos = inf ;
    S = n ;
    for £¨int i = 0 ; i < m ; i ++ £©{
    RD£¨E[i].s£© ;RD£¨E[i].e£© ; RD£¨E[i].l£© ;
    }
    for £¨int i = 0 ; i < n ; i ++ £©{
    E[m].s = S ; E[m].e = i ; E[m].l = inf - 1 ;
    m ++ ;
    }
    type ans = Directed_MST£¨ n , n + 1 , m£© ;
    if£¨ans == -1 || ans - inf + 1 >= inf - 1£©puts£¨"impossible"£© ;
    else cout ¡¶ ans - inf + 1 ¡¶ " " ¡¶ pos - fk ¡¶ endl ;
    puts£¨""£© ;
    }
    return 0 ;
    }

¡¾´ó ÖРС¡¿¡¾´òÓ¡¡¿ ¡¾·±Ìå¡¿¡¾Í¶¸å¡¿¡¾Êղء¿ ¡¾ÍƼö¡¿¡¾¾Ù±¨¡¿¡¾ÆÀÂÛ¡¿ ¡¾¹Ø±Õ¡¿ ¡¾·µ»Ø¶¥²¿¡¿
·ÖÏíµ½: 
ÉÏһƪ£º³¬¼¶Ô´Ïòÿ¸öHOUSEÁ¬±ß ÏÂһƪ£º¹ØÓÚ³¬¼¶Ô´µãºÍ³¬¼¶»ãµãÎÊÌâ

ÆÀÂÛ

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

¡¤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)