hdu 1102 Constructing Roads(最小生成树,prim)

来源:互联网 发布:乐视1s移动数据开关 编辑:程序博客网 时间:2024/04/30 04:09
#include <iostream>#include <cstring>using namespace std;#define INF 99999999int map[101][101];int book[101],dis[101];int main(){    int i,n,j,counts,mins,Q;    while(cin >> n)    {        counts = 0;        for(i = 1; i <= n; ++i)            for(j = 1; j <= n; ++j)            {                cin >> map[i][j];            }        cin >> Q;        for(i = 1; i <= Q; ++i)        {            int a,b;            cin >> a >> b;            map[a][b] = map[b][a] = 0;        }        for(int i = 1; i <= n; ++i)            dis[i] = map[1][i];        memset(book,0,sizeof(book));        book[1] = 1;        ++counts;        int sum = 0;        while(counts < n)        {            mins = INF;            for(i = 1; i <= n; ++i)            {                if(book[i] == 0 && dis[i] < mins)                {                    mins = dis[i];                    j = i;                }            }            ++counts;            book[j] = 1;            sum += dis[j];            for(int k = 1; k <= n; ++k)            {                if(book[k] == 0 && dis[k] > map[j][k])                    dis[k] = map[j][k];            }        }        cout << sum << endl;    }    return 0;}

0 0
原创粉丝点击