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

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 閱讀(391) 評論(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>
            欧美电影免费网站| 欧美日韩视频在线一区二区观看视频| 欧美午夜片欧美片在线观看| 日韩视频在线永久播放| 亚洲国产精品ⅴa在线观看| 久久综合久久综合这里只有精品| 狠狠色狠狠色综合| 久久久久久久久久久久久9999| 久久国产黑丝| 亚洲激情在线观看| 99视频一区二区| 国产精品夜夜夜| 欧美 亚欧 日韩视频在线| 欧美丰满少妇xxxbbb| 亚洲一区二区三区在线视频| 亚洲欧美激情视频| 亚洲第一中文字幕| 亚洲精品日韩在线观看| 国产精品自拍在线| 欧美高清日韩| 国产精品久久久久一区| 久久久久久久久久久一区 | 另类天堂av| 一区二区三区日韩在线观看| 午夜国产欧美理论在线播放| 亚洲福利av| 国产伦一区二区三区色一情| 欧美高清视频在线| 国产精品入口夜色视频大尺度| 久久综合伊人77777尤物| 欧美精品一区三区在线观看| 新片速递亚洲合集欧美合集| 狼人社综合社区| 久久福利资源站| 欧美激情中文不卡| 久久免费视频网站| 国产精品久久一卡二卡| 欧美jizz19性欧美| 国产精品美女一区二区在线观看 | 亚洲国产精品久久精品怡红院| 日韩一区二区精品视频| 亚洲第一在线视频| 亚洲一区二区动漫| 在线亚洲美日韩| 欧美大秀在线观看| 久久久夜色精品亚洲| 欧美视频一区二区在线观看| 欧美mv日韩mv国产网站| 国产精品综合av一区二区国产馆| 91久久视频| 亚洲国产美女| 久久久久久欧美| 久久亚洲春色中文字幕久久久| 国产精品啊啊啊| 一区二区欧美日韩| 一本久久综合| 欧美精品在线一区| 亚洲人成免费| 亚洲人成在线影院| 免费成人av| 亚洲国产精品福利| 亚洲理论在线| 欧美激情偷拍| 亚洲九九九在线观看| 日韩视频第一页| 欧美久久99| 99re6热只有精品免费观看| 日韩视频一区二区三区在线播放| 久久综合999| 欧美国产另类| 亚洲免费成人| 国产精品va在线| 亚洲一区999| 久久精品国产99国产精品澳门| 国产精品视频网| 香蕉av福利精品导航| 久久精品91| 激情久久久久久久久久久久久久久久| 久久精品国产在热久久| 麻豆精品精品国产自在97香蕉| 在线欧美日韩精品| 欧美国产日韩在线| 99国产精品久久久| 久久精品99国产精品日本| 国产一区二区久久久| 久久深夜福利免费观看| 亚洲第一毛片| 在线中文字幕日韩| 国产欧美日韩在线| 久久综合九色综合欧美狠狠| 亚洲二区精品| 亚洲欧美乱综合| 影院欧美亚洲| 欧美日韩亚洲激情| 欧美伊人久久久久久午夜久久久久 | 亚洲欧美欧美一区二区三区| 国产欧美一区二区精品性色| 久久久免费精品| 日韩一级裸体免费视频| 久久午夜激情| 亚洲深夜福利网站| 精品电影一区| 国产精品美女| 蜜臀久久99精品久久久画质超高清| 亚洲精品久久久久中文字幕欢迎你| 亚洲欧美偷拍卡通变态| 亚洲大片一区二区三区| 欧美亚州在线观看| 免播放器亚洲一区| 午夜一区二区三区在线观看 | 香蕉成人久久| 亚洲美女少妇无套啪啪呻吟| 国产精品你懂的| 欧美激情va永久在线播放| 亚洲欧美变态国产另类| 欧美成人一区二区在线| 欧美一级久久久久久久大片| 亚洲人午夜精品| 狠狠色综合日日| 国产精品色婷婷久久58| 欧美大片一区| 久久综合九色欧美综合狠狠| 亚洲一区精品电影| 亚洲精品久久久久| 欧美国产综合视频| 久久影视精品| 久久成人综合网| 亚洲欧美日韩成人| 夜夜夜久久久| 日韩午夜中文字幕| 91久久一区二区| 亚洲高清在线| 亚洲电影免费在线观看| 国产亚洲女人久久久久毛片| 国产精品劲爆视频| 欧美三级精品| 欧美三区在线视频| 欧美三级视频在线播放| 欧美日本韩国| 欧美精品一区二区三区四区| 你懂的一区二区| 欧美高清你懂得| 欧美福利电影在线观看| 欧美国产高潮xxxx1819| 欧美激情第六页| 欧美久久久久中文字幕| 欧美日韩国产成人在线免费| 欧美久久九九| 欧美色道久久88综合亚洲精品| 欧美日韩一区二区三区在线| 欧美人与禽性xxxxx杂性| 欧美精品 国产精品| 欧美日韩高清在线观看| 欧美午夜精品久久久久久人妖| 欧美午夜精品久久久久免费视| 欧美色区777第一页| 国产精品视频观看| 狠狠操狠狠色综合网| 亚洲高清不卡在线| 99re6这里只有精品| 亚洲一区二区黄| 欧美一区二区私人影院日本| 久久精品亚洲一区二区三区浴池| 久久亚洲欧洲| 欧美国产91| 在线亚洲成人| 欧美在线亚洲| 欧美激情一区二区三区全黄| 欧美日韩一区视频| 国产亚洲欧美日韩日本| 黄色日韩网站视频| av成人免费观看| 久久精品亚洲热| 亚洲黑丝一区二区| 亚洲一区三区视频在线观看| 久久久久久久波多野高潮日日| 欧美成人精品三级在线观看| 国产精品狠色婷| 91久久精品国产91久久| 亚洲一区二区三区在线观看视频| 久久国产主播| 亚洲乱码国产乱码精品精| 欧美一区二区三区免费视| 男人的天堂成人在线| 国产精品一区二区三区久久久| 亚洲第一精品久久忘忧草社区| 中文网丁香综合网| 免费久久99精品国产自| 一区二区免费在线观看| 噜噜噜噜噜久久久久久91 | 玖玖精品视频| 国产精品美女www爽爽爽| 亚洲国产一区二区三区青草影视 | 亚洲欧美在线另类| 欧美第一黄网免费网站| 午夜精品av| 国产精品成人播放| 日韩小视频在线观看专区| 久久综合久久综合久久综合| 亚洲在线一区二区|