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

posts - 7,comments - 3,trackbacks - 0
Slim Span
Time Limit: 5000MSMemory Limit: 65536K
Total Submissions: 4023Accepted: 2116

Description

Given an undirected weighted graph G, you should find one of spanning trees specified as follows.

The graph G is an ordered pair (VE), where V is a set of vertices {v1v2, …, vn} and E is a set of undirected edges {e1e2, …, em}. Each edge e ∈ E has its weight w(e).

A spanning tree T is a tree (a connected subgraph without cycles) which connects all the n vertices with n − 1 edges. The slimness of a spanning tree T is defined as the difference between the largest weight and the smallest weight among the n − 1 edges of T.


Figure 5: A graph G and the weights of the edges

For example, a graph G in Figure 5(a) has four vertices {v1v2v3v4} and five undirected edges {e1e2e3e4e5}. The weights of the edges are w(e1) = 3, w(e2) = 5, w(e3) = 6, w(e4) = 6, w(e5) = 7 as shown in Figure 5(b).


Figure 6: Examples of the spanning trees of G

There are several spanning trees for G. Four of them are depicted in Figure 6(a)~(d). The spanning tree Ta in Figure 6(a) has three edges whose weights are 3, 6 and 7. The largest weight is 7 and the smallest weight is 3 so that the slimness of the tree Ta is 4. The slimnesses of spanning trees TbTc and Td shown in Figure 6(b), (c) and (d) are 3, 2 and 1, respectively. You can easily see the slimness of any other spanning tree is greater than or equal to 1, thus the spanning tree Td in Figure 6(d) is one of the slimmest spanning trees whose slimness is 1.

Your job is to write a program that computes the smallest slimness.

Input

The input consists of multiple datasets, followed by a line containing two zeros separated by a space. Each dataset has the following format.

nm
a1b1w1
ambmwm

Every input item in a dataset is a non-negative integer. Items in a line are separated by a space. n is the number of the vertices and m the number of the edges. You can assume 2 ≤ n ≤ 100 and 0 ≤ m ≤ n(n − 1)/2. ak and bk (k = 1, …, m) are positive integers less than or equal to n, which represent the two vertices vak and vbk connected by the kth edge ekwk is a positive integer less than or equal to 10000, which indicates the weight of ek. You can assume that the graph G = (VE) is simple, that is, there are no self-loops (that connect the same vertex) nor parallel edges (that are two or more edges whose both ends are the same two vertices).

Output

For each dataset, if the graph has spanning trees, the smallest slimness among them should be printed. Otherwise, −1 should be printed. An output should not contain extra characters.

Sample Input

4 5
1 2 3
1 3 5
1 4 6
2 4 6
3 4 7
4 6
1 2 10
1 3 100
1 4 90
2 3 20
2 4 80
3 4 40
2 1
1 2 1
3 0
3 1
1 2 1
3 3
1 2 2
2 3 5
1 3 6
5 10
1 2 110
1 3 120
1 4 130
1 5 120
2 3 110
2 4 120
2 5 130
3 4 120
3 5 110
4 5 120
5 10
1 2 9384
1 3 887
1 4 2778
1 5 6916
2 3 7794
2 4 8336
2 5 5387
3 4 493
3 5 6650
4 5 1422
5 8
1 2 1
2 3 100
3 4 100
4 5 100
1 5 50
2 5 50
3 5 50
4 1 150
0 0

Sample Output

1
20
0
-1
-1
1
0
1686
50

Source



題目就是生成一棵樹,要求邊權最大減最小的差最小。
根據Kruskal思想,把邊排序,之后枚舉一下就行了。

代碼:

#include <cmath>
#include 
<cstdio>
#include 
<cstdlib>
#include 
<cstring>
#include 
<iostream>
#include 
<algorithm>
using namespace std;

const int M = 5005;
const int INF = 1 << 29;

struct edge
{
    
int st, ed, w;
    
bool operator < (edge a) const
    {
        
return w < a.w;
    }
} e[M];

int n, m, ans, num, temp;
int f[105], rank[105];

void makeset()
{
    
for (int i = 1; i <= n; ++i)
        f[i] 
= i;
    memset(rank, 
0sizeof(rank));
}

int find(int x)
{
    
while (f[x] != x) x = f[x];
    
return x;
}

void unionset(int a, int b)
{
    
int p = find(a);
    
int q = find(b);
    
if (rank[p] > rank[q])
        f[q] 
= p;
    
else
    
if (rank[p] < rank[q])
        f[p] 
= q;
    
else
    {
        f[p] 
= q;
        rank[q]
++;
    }
}

void kruskal()
{
    ans 
= INF;
    
for (int i = 0; i < m - n + 2++i)
    {
        makeset();
        temp 
= -1;
        num 
= 0;
        
for (int j = i; j < m; ++j)
        {
            
if (find(e[j].st) != find(e[j].ed))
            {
                num
++;
                unionset(e[j].st, e[j].ed);
                
if (num == n - 1)
                {
                    temp 
= e[j].w - e[i].w;
                    
break;
                }
            }
        }
        
if (temp == -1break;
        
if (temp != -1 && temp < ans) ans = temp;
    }
    
if (ans >= INF) printf("-1\n");
    
else printf("%d\n", ans);
}

int main()
{
    
while (scanf("%d%d"&n, &m), n || m)
    {
        
for (int i = 0; i < m; ++i)
            scanf(
"%d%d%d"&e[i].st, &e[i].ed, &e[i].w);
        sort(e, e 
+ m);
        kruskal();
    }
    
return 0;
}
posted on 2011-10-17 15:54 LLawliet 閱讀(390) 評論(0)  編輯 收藏 引用 所屬分類: 圖論

只有注冊用戶登錄后才能發表評論。
網站導航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            欧美人成在线| 欧美网站在线观看| 极品av少妇一区二区| 久久99伊人| 欧美一区二区三区播放老司机| 国产精品一区二区你懂得 | 一区二区三区视频在线| 欧美精品一区二区在线观看| 99av国产精品欲麻豆| 亚洲日韩视频| 国产精品99免费看| 欧美一区午夜精品| 久久精品成人| 亚洲激情在线激情| 亚洲精品一区二区三区不| 欧美色综合天天久久综合精品| 亚洲午夜小视频| 欧美一二三区在线观看| 黄色一区二区在线观看| 欧美第一黄色网| 欧美激情视频给我| 亚洲欧美日韩高清| 久久精品一二三区| 亚洲日韩视频| 一区二区三区四区五区精品| 国产亚洲人成a一在线v站| 免费在线亚洲| 欧美天天影院| 久久综合影音| 欧美三级在线视频| 久久亚洲欧美| 欧美日韩亚洲综合在线| 久久理论片午夜琪琪电影网| 欧美激情第4页| 欧美一级艳片视频免费观看| 久久一区免费| 午夜精品影院| 欧美国产精品人人做人人爱| 欧美在线免费视屏| 欧美激情一区二区三区不卡| 欧美在线视频二区| 欧美日韩国产综合视频在线观看 | 国产日韩亚洲| 亚洲人成在线观看网站高清| 国产日韩欧美一区二区三区在线观看| 欧美二区不卡| 国产主播在线一区| 在线亚洲欧美视频| 亚洲麻豆一区| 久久综合色婷婷| 欧美在线日韩精品| 欧美午夜电影在线观看| 亚洲国产精品福利| 在线电影欧美日韩一区二区私密| 在线亚洲欧美视频| 99热精品在线观看| 免费欧美在线视频| 麻豆亚洲精品| 狠狠色狠狠色综合日日91app| 亚洲天天影视| 在线视频欧美日韩精品| 欧美成人午夜| 欧美高清影院| 亚洲激情一区二区| 久久婷婷国产综合精品青草| 久久国产精品久久久久久| 欧美体内she精视频在线观看| 亚洲国产日韩欧美一区二区三区| 亚洲成色www久久网站| 欧美尤物一区| 久久久欧美精品| 国产一区在线看| 欧美在线啊v一区| 久久久九九九九| 国产亚洲欧洲一区高清在线观看| 亚洲欧美变态国产另类| 新狼窝色av性久久久久久| 国产精品女主播在线观看| 一区二区成人精品| 亚洲欧美综合网| 国产欧美三级| 久久黄色网页| 欧美电影在线观看完整版| 亚洲片国产一区一级在线观看| 免费观看久久久4p| 最新国产成人av网站网址麻豆 | 免费欧美高清视频| 91久久精品一区二区三区| 99精品久久久| 国产精品久久久久久模特| 亚洲欧美日韩网| 蜜桃精品一区二区三区| 亚洲国产欧美日韩精品| 欧美精品18| 亚洲一区二区三区777| 久久久999精品免费| 雨宫琴音一区二区在线| 欧美福利视频在线观看| 亚洲人成免费| 久久国产日本精品| 亚洲国产精品电影| 国产精品久久久久久久午夜片| 午夜精品视频网站| 欧美不卡三区| 亚洲一区二区日本| 国产一区二区三区在线观看免费| 麻豆精品一区二区av白丝在线| 最新69国产成人精品视频免费| 午夜日韩视频| 亚洲精品美女在线| 国产麻豆日韩| 欧美精品在线免费播放| 亚洲欧美偷拍卡通变态| 亚洲国产1区| 久久国产主播精品| 亚洲免费观看在线观看| 国产视频亚洲精品| 欧美日韩国产丝袜另类| 久久国产精品亚洲77777| 亚洲日韩欧美视频| 久热精品视频| 亚洲欧美怡红院| 亚洲精品欧美日韩专区| 国产欧美一区二区精品仙草咪| 欧美成人一区二区三区在线观看 | 亚洲国产高清视频| 久久国内精品视频| 亚洲砖区区免费| 在线观看成人一级片| 国产精品乱人伦一区二区| 欧美国产三区| 另类综合日韩欧美亚洲| 午夜精品短视频| 在线一区免费观看| 亚洲欧洲日本国产| 欧美激情欧美狂野欧美精品| 久久精品亚洲一区二区| 午夜精品久久久久| 亚洲视频一区二区| 一区二区三区高清在线观看| 91久久精品日日躁夜夜躁国产| 国产一区二区三区精品久久久| 欧美性大战久久久久久久蜜臀| 欧美高清视频| 欧美电影在线| 你懂的视频欧美| 免费欧美视频| 免费日韩一区二区| 欧美mv日韩mv国产网站| 狂野欧美激情性xxxx欧美| 久久久精品免费视频| 午夜精品亚洲一区二区三区嫩草| 亚洲天堂av高清| 亚洲一二三级电影| 亚洲伊人伊色伊影伊综合网| 亚洲一区二区在线观看视频| 一区二区三区成人| 亚洲一区二区成人| 午夜天堂精品久久久久| 欧美在线观看日本一区| 久久精品99国产精品酒店日本| 欧美在线不卡视频| 久久频这里精品99香蕉| 欧美+日本+国产+在线a∨观看| 六十路精品视频| 欧美高清一区| 欧美日韩一区免费| 国产精品自拍视频| 国内在线观看一区二区三区| 一区二区三区在线视频播放| 亚洲国产婷婷| 一区二区福利| 欧美一区精品| 免费不卡中文字幕视频| 亚洲国产欧美在线| 亚洲视频 欧洲视频| 欧美中文字幕视频| 欧美搞黄网站| 国产精品久久久久久久久久久久久久 | 久久蜜桃资源一区二区老牛 | 亚洲国产欧美一区二区三区同亚洲| 亚洲国产免费| 亚洲综合精品自拍| 久久露脸国产精品| 亚洲欧洲在线看| 亚洲女性喷水在线观看一区| 久久久夜精品| 欧美日韩亚洲综合在线| 国产主播精品| 一区二区毛片| 久久亚洲图片| 99re66热这里只有精品4| 久久av免费一区| 欧美日本一区二区三区| 狠狠色噜噜狠狠狠狠色吗综合| 亚洲免费电影在线| 久久伊人免费视频| 亚洲视频精品| 欧美激情成人在线| 在线成人激情黄色|