青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

posts - 7,comments - 3,trackbacks - 0

Ice_cream’s world II

Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 938    Accepted Submission(s): 192


Problem Description
After awarded lands to ACMers, the queen want to choose a city be her capital. This is an important event in ice_cream world, and it also a very difficult problem, because the world have N cities and M roads, every road was directed. Wiskey is a chief engineer in ice_cream world. The queen asked Wiskey must find a suitable location to establish the capital, beautify the roads which let capital can visit each city and the project’s cost as less as better. If Wiskey can’t fulfill the queen’s require, he will be punishing.
 

Input
Every case have two integers N and M (N<=1000, M<=10000), the cities numbered 0…N-1, following M lines, each line contain three integers S, T and C, meaning from S to T have a road will cost C.
 

Output
If no location satisfy the queen’s require, you must be output “impossible”, otherwise, print the minimum cost in this project and suitable city’s number. May be exist many suitable cities, choose the minimum number city. After every case print one blank.
 

Sample Input
3 1 0 1 1 4 4 0 1 10 0 2 10 1 3 20 2 3 30
 

Sample Output
impossible 40 0
 

Author
Wiskey
 

Source
 

Recommend
威士忌
 



思路:不定根的最小樹形圖,做法就是虛擬一個根,讓所有點到這個根連線邊,并且邊權值很大,這樣就能保證最后只有一個點連向這個虛擬根,這樣最后結果減去這個很大值就行了。
代碼:
#include <cstdio>
#include 
<cstring>
#include 
<algorithm>
#define MAXN 1010
#define MAXE 10100
using namespace std;

typedef 
long long typec;
const typec INF = 0x7fffffffffffffffLL;

struct Arcs
{
    
int _a, _b;
} arcs[MAXE 
+ MAXN];

struct AdjNode
{
    
int _v;
    Arcs 
*_rf;
    typec _c;
    AdjNode 
*_next;
*adj[MAXN], adjmem[MAXE + MAXN];
 
int adjcnt;
 
inline 
void init(int n)
{
    memset(adj, 
0, n * sizeof(AdjNode *));
    adjcnt 
= 0;
}
 
inline 
void add_edge(int a, int b, typec c)
{
    arcs[adjcnt]._a 
= a;
    arcs[adjcnt]._b 
= b;
    AdjNode 
*ptr = adjmem + adjcnt++;
    ptr 
-> _c = c;
    ptr 
-> _v = a;
    ptr 
-> _rf = arcs + adjcnt - 1;
    ptr 
-> _next = adj[b];
    adj[b] 
= ptr;
}
 
int pre[MAXN], real_pre[MAXN];
bool is_out[MAXN];
int vis[MAXN], vcnt;
 
typec solve(
int n, int root)
{
    
static typec ch[MAXN];
    memset(is_out, 
false, n);
    typec ans 
= 0;
    
while (1)
    {
        
int i, j, k;
        
for (i = 0; i < n; ++i)
            
if (i != root && !is_out[i])
            {
                pre[i] 
= i;
                ch[i] 
= INF;
                AdjNode 
*chp;
                
for (AdjNode *ptr = adj[i]; ptr; ptr = ptr -> _next)
                {
                    j 
= ptr -> _v;
                    
if (!is_out[j])
                    {
                        
if (ch[i] > ptr -> _c)
                        {
                            pre[i] 
= j;
                            ch[i] 
= ptr -> _c;
                            chp 
= ptr;
                        }
                        
else if (ch[i] == ptr -> _c && ptr -> _rf -> _a == root && ptr -> _rf -> _b < chp -> _rf -> _b)
                        {
                            pre[i] 
= j;
                            chp 
= ptr;
                        }
                    }
                }
                
if (pre[i] == i) throw false;
                real_pre[chp 
-> _rf -> _b] = chp -> _rf -> _a;
            }
        memset(vis, 
0, n * sizeof(int));
        vcnt 
= 0;
        
for (i = 0; i < n; ++i)
            
if (i != root && !is_out[i])
            {
                j 
= i;
                vis[i] 
= ++ vcnt;
                
while (vis[pre[j]] == 0 && pre[j] != root)
                {
                    j 
= pre[j];
                    vis[j] 
= vcnt;
                }
                
if (vis[pre[j]] == vcnt)
                {
                    i 
= pre[j];
                    
break;
                }
            }
        
if (i == n)
        {
            
for (j = 0; j < n; ++j)
                
if (j != root && !is_out[j])
                    ans 
+= ch[j];
            
break;
        }
        j 
= i;
        
++vcnt;
        
int ti = i;
        
do
        {
            ti 
= min(ti, j);
            vis[j] 
= vcnt;
            is_out[j] 
= true;
            ans 
+= ch[j];
            j 
= pre[j];
        }
        
while (j != i);
        i 
= ti;
        
for (j = 0; j < n; ++j)
            
if (vis[j] == vcnt)
                
for (AdjNode **ptr = adj + j; *ptr;)
                {
                    k 
= (*ptr) -> _v;
                    
if (!is_out[k])
                    {
                        AdjNode 
*p2 = *ptr;
                        p2 
-> _c -= ch[j];
                        
if (i != j)
                        {
                            
*ptr = p2 -> _next;
                            p2 
-> _next = adj[i];
                            adj[i] 
= p2;
                        }
                        
else
                            ptr 
= &((*ptr) -> _next);
                    }
                    
else
                        ptr 
= &((*ptr) -> _next);
                }
        
for (k = 0; k < n; ++k)
            
if (!is_out[k])
                
for (AdjNode *ptr = adj[k]; ptr; ptr = ptr -> _next)
                {
                    j 
= ptr -> _v;
                    
if (vis[j] == vcnt)
                        ptr 
-> _v = i;
                }
        is_out[i] 
= false;
    }
    
return ans;
}
 
int main()
{
    
int n, m;
    
while (scanf("%d%d"&n, &m) != EOF)
    {
        init(n 
+ 1);
        
long long s = 1;
        
for (int i = 0; i < m; ++i)
        {
            
int a, b, c;
            scanf(
"%d%d%d"&a, &b, &c);
            
if (a != b)
            {
                add_edge(a, b, c);
                s 
+= c;
            }
        }
        
for (int i = 0; i < n; ++i)
            add_edge(n, i, s);
        
long long ans = solve(n + 1, n);
        
int r, p;
        
for (r = 0; real_pre[r] != n; ++r);
        
for (p = r + 1; p < n; ++p)
            
if (real_pre[p] == n)
                
break;
        
if (p == n)
            printf(
"%I64d %d\n\n", ans - s, r);
        
else
            printf(
"impossible\n\n");
    }
    
return 0;
}
 
posted on 2011-10-15 22:18 LLawliet 閱讀(266) 評論(0)  編輯 收藏 引用 所屬分類: 圖論
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            久久久久久尹人网香蕉| 欧美精品在线免费观看| 蜜桃伊人久久| 久久久www成人免费毛片麻豆| 亚洲欧美日韩区| 午夜久久福利| 久久精品中文字幕一区| 美日韩精品视频| 亚洲日韩欧美视频一区| 免费成人激情视频| 麻豆精品91| 亚洲人线精品午夜| aa日韩免费精品视频一| 亚洲一区二区三区中文字幕| 欧美一区三区二区在线观看| 久久久久在线观看| 欧美日韩国产在线播放| 国产精品久久久久久av福利软件| 国产欧美韩日| 亚洲裸体视频| 欧美一区二区三区久久精品| 老鸭窝毛片一区二区三区| 91久久精品美女| 在线一区亚洲| 久久精品99国产精品| 欧美人妖在线观看| 国产一区二三区| 99视频精品全国免费| 亚洲尤物影院| 欧美国产日韩精品免费观看| 亚洲午夜电影在线观看| 久久综合五月| 欧美亚一区二区| 亚洲国产成人在线视频| 亚洲一区二区3| 欧美激情国产精品| 亚洲午夜高清视频| 欧美美女操人视频| 精品成人久久| 欧美在线观看你懂的| 亚洲人成77777在线观看网| 欧美一区二区三区播放老司机 | 一区二区三区四区精品| 久久超碰97人人做人人爱| 免费日本视频一区| 亚洲午夜精品福利| 欧美理论在线| 最新日韩av| 免费成人黄色av| 亚洲人在线视频| 免费黄网站欧美| 国产有码在线一区二区视频| 亚洲欧美激情四射在线日| 亚洲国内自拍| 免费成人高清视频| 一区二区三区自拍| 久久久蜜桃精品| 久久国产精品一区二区| 国产日韩在线不卡| 欧美在线免费视屏| 午夜精品免费在线| 国产欧美丝祙| 欧美中文字幕在线播放| 中文av一区特黄| 国产精品九九| 亚洲一区二区在线免费观看| 一区二区成人精品| 国产精品国产三级国产aⅴ无密码| 99天天综合性| 亚洲图片欧洲图片av| 国产精品99免费看| 亚洲男同1069视频| 亚洲神马久久| 国产伦精品一区二区三区照片91| 性久久久久久久久久久久| 夜色激情一区二区| 国产精品男人爽免费视频1| 亚洲欧美日韩一区二区| 欧美一级在线视频| 在线播放视频一区| 亚洲狠狠婷婷| 国产精品久久久久久久久久ktv| 亚洲欧美激情一区| 久久久久综合| 亚洲免费观看在线观看| 亚洲最新视频在线| 国模私拍视频一区| 亚洲黄色片网站| 国产精品区一区二区三区| 久久久999成人| 免费看黄裸体一级大秀欧美| 亚洲图片在区色| 欧美一级播放| 亚洲精品永久免费精品| 亚洲网站在线观看| 亚洲国产欧美在线| 亚洲免费小视频| 91久久精品国产91久久性色| 中文在线不卡视频| 国内精品伊人久久久久av一坑| 亚洲第一福利社区| 国产精品久久婷婷六月丁香| 久久夜色精品国产亚洲aⅴ| 欧美精品videossex性护士| 欧美一区二区三区电影在线观看| 欧美wwwwww| 久久久国产亚洲精品| 欧美午夜精品久久久久久浪潮| 免费91麻豆精品国产自产在线观看| 欧美日韩亚洲一区二| 鲁大师影院一区二区三区| 国产精品99免费看 | 国产欧美精品国产国产专区| 欧美国产三区| 国产欧美日韩专区发布| 亚洲乱码精品一二三四区日韩在线 | 亚洲伊人久久综合| 欧美国产亚洲精品久久久8v| 国产久一道中文一区| 亚洲国产美女| 亚洲第一精品夜夜躁人人躁| 亚洲一区二区网站| 日韩亚洲欧美一区二区三区| 欧美在线视频二区| 亚洲欧美自拍偷拍| 欧美日韩精品在线| 亚洲精品综合在线| 亚洲精品视频免费观看| 麻豆国产精品va在线观看不卡 | 亚洲午夜精品网| 美女黄毛**国产精品啪啪| 久久精品在线免费观看| 国产精品尤物福利片在线观看| 亚洲啪啪91| 亚洲精品一二三区| 免费成人网www| 亚洲国产成人精品久久| 91久久精品日日躁夜夜躁国产| 久久久99久久精品女同性| 久久久777| 伊人久久亚洲美女图片| 欧美在线综合视频| 欧美www视频在线观看| 国产香蕉97碰碰久久人人| 亚洲欧美网站| 久久人91精品久久久久久不卡| 国产综合色在线| 久久久久久久综合色一本| 美腿丝袜亚洲色图| 亚洲经典自拍| 欧美日本乱大交xxxxx| 99在线精品视频| 久久av一区二区三区漫画| 国产亚洲二区| 久久久久久噜噜噜久久久精品| 欧美ed2k| 亚洲视频999| 国产一区二区三区高清在线观看| 久久久精品国产一区二区三区| 欧美激情视频在线播放| 一区二区av| 欧美国产日本高清在线| 99精品热视频只有精品10| 午夜天堂精品久久久久| 国产永久精品大片wwwapp| 免费欧美在线| 中文在线资源观看视频网站免费不卡| 欧美一区视频| 99av国产精品欲麻豆| 国产欧美在线视频| 美女999久久久精品视频| 亚洲激情在线激情| 亚洲欧美日本日韩| 亚洲电影专区| 国产精品成人午夜| 久久久久久久激情视频| 亚洲三级视频在线观看| 久久久夜夜夜| 亚洲一区二区高清| 在线视频观看日韩| 国产精品高潮呻吟| 欧美成人精品三级在线观看| 亚洲欧美日韩精品综合在线观看| 免费成人小视频| 亚欧成人在线| 夜久久久久久| 国产中文一区| 国产精品久久久久久久久| 美国成人毛片| 久久久精品免费视频| 亚洲欧美一级二级三级| 日韩视频永久免费| 奶水喷射视频一区| 久久久精品动漫| 亚洲免费黄色| 亚洲国产高清aⅴ视频| 国产欧美日韩另类一区| 欧美日韩色婷婷| 久久野战av| 久久精品理论片|