Online JudgeProblem SetAuthorsOnline ContestsUser
Web Board
Home Page
F.A.Qs
Statistical Charts
Problems
Submit Problem
Online Status
Prob.ID:
Register
Update your info
Authors ranklist
Current Contest
Past Contests
Scheduled Contests
Award Contest
User ID:
Password:
  Register

第二次敲Prim

Posted by CCUT_king at 2018-04-21 16:42:32 on Problem 1258
#include <iostream>
#include <queue>
#include <vector>
#include <cstring>
using namespace std;
typedef long long ll;
const int maxn=102;
struct edge{
    int to;
    ll cost;
    edge(int x,ll y):to(x),cost(y){}
    edge(){}
    bool operator< (const edge& xx) const{
        return xx.cost<cost;
    }
};
priority_queue<edge> que;
ll G[maxn][maxn]; //邻接矩阵;
int n;
bool vis[maxn];
ll prim()
{
    ll res=0;
    vis[1]=1;
    for(int i=2;i<=n;i++)   //该点相邻的点均入队列;
        que.push(edge(i,G[1][i]));
    while(!que.empty())
    {
        edge e=que.top();
        que.pop();
        if(vis[e.to])continue;
        res+=e.cost;
        vis[e.to]=1;
        for(int i=1;i<=n;i++)//新加入的点的相邻边入队列;
            if(i!=e.to)
                que.push(edge(i,G[e.to][i]));
    }
    return res;
}
int main()
{
    while(cin >> n)
    {
        memset(vis,0,sizeof(vis));
        while(!que.empty()) que.pop();
        for(int i=1;i<=n;i++)
            for(int j=1;j<=n;j++)
                cin >> G[i][j];
        ll ans=prim();
        cout << ans << endl;
    }
    return 0;
}

Followed by:

Post your reply here:
User ID:
Password:
Title:

Content:

Home Page   Go Back  To top


All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator