ZOJ 1586 QS Network prim优化模板

链接:

1586

题意:

有一个N X N的网络,每两个点都有边相连,边的权值用邻接矩阵输入,每个点也有一个权值,当它们之间的那条边被选取时,需要加上两个点的权值。求这个网络的最小生成树。

直接套用prim算法的模板 其中用到一个节约内存的优化 将lowdistance 和visit 两个数组

结合起来 如果访问过lowdistance改成-1即可

另外该题中边的权值应为边本身的权值加上两端点的权值。

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
#define maxx   9999999
int map[1010][1010];
int price[1010];
int n,ans;
void prim()
{
    int i,j,minn,loc;
    for(i=1; i<=n; i++)
        lowdis[i]=map[1][i];
    lowdis[1]=-1;
    for(i=1; i<n; i++)
    {
        minn=maxx;
        for(j=1; j<=n; j++)
            if(lowdis[j]!=-1&&lowdis[j]<minn)
                minn=lowdis[j],loc=j;
        ans+=lowdis[loc];
        lowdis[loc]=-1;
        for(j=1; j<=n; j++)
            if(lowdis[j]>map[loc][j])
                lowdis[j]=map[loc][j];
    }
    return;
}
int main()
{
    int t,i,j;
    scanf("%d",&t);
    while(t--)
    {
        ans=0;
        scanf("%d",&n);
        for(i=1; i<=n; i++)
            scanf("%d",&price[i]);
        for(i=1; i<=n; i++)
            for(j=1; j<=n; j++)
            {
                scanf("%d",&map[i][j]);
                if(i==j)
                    map[i][j]=maxx;
                else
                    map[i][j]+=price[i]+price[j];
            }
        prim();
        cout<<ans<<endl;
    }
    return 0;
}
时间: 2024-10-10 17:11:52

ZOJ 1586 QS Network prim优化模板的相关文章

ZOJ 1586 QS Network (经典MST~Prim)

链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=586 In the planet w-503 of galaxy cgb, there is a kind of intelligent creature named QS. QScommunicate with each other via networks. If two QS want to get connected, they need to buy two n

ZOJ 1586 QS Network(最小生成树 prim)

题意  输入n  然后输入n个数  代表连接时每个站点自身的消耗   然后输入n*n的矩阵  第i行第j列的数代表第i个站点和第j个站点之间路上的花费  链接i,j两个节点的总花费为两站点自身花费加上路上的花费  求⑩这n个站点连通的最小总花费 又是裸的最小生成树  给点的就用prim咯 #include<cstdio> #include<cstring> #include<algorithm> using namespace std; const int N = 10

ZOJ 1586 QS Network(kruskal)(基础)

Sunny Cup 2003 - Preliminary Round April 20th, 12:00 - 17:00 Problem E: QS Network In the planet w-503 of galaxy cgb, there is a kind of intelligent creature named QS. QScommunicate with each other via networks. If two QS want to get connected, they

zoj 1586 QS Network

最小生成树,刚刚学了Prim算法. 对每条边变的权值进行预处理,c[i][j] = c[i][j] + p[i] + p[j] 其中c[i][j]为输入的权值,p[i],p[j]为连接这两个节点所需的费用. #include<stdio.h> #include<string.h> #include<math.h> #include<algorithm> using namespace std; const int maxn = 1010; int c[max

POJ 1861 Network Kruskal优化模板

题目链接: 1861 题意: 又M个点  N条边  求构成最小生成树的最大边   和所有边的两个端点 裸最小生成树    加上了两个优化 1.路径压缩:查找x元素的根节点d时,将x的所有父亲节点全部直接变成根节点的子节点 以减少下次查找的查找时间 2.在并查集  并 的过程中 考虑两个节点谁的子节点多,少的作为子节点 代码:

ZOJ QS Network (prime_裸题)

In the planet w-503 of galaxy cgb, there is a kind of intelligent creature named QS. QScommunicate with each other via networks. If two QS want to get connected, they need to buy two network adapters (one for each QS) and a segment of network cable.

最小生成树--prim+优先队列优化模板

prim+优先队列模板: 1 #include<stdio.h> //大概要这些头文件 2 #include<string.h> 3 #include<queue> 4 #include<vector> 5 #include<algorithm> 6 using namespace std; 7 typedef pair<int,int> pii; 8 9 int head[30],next[200],point[200],val[2

FZU 1096 QS Network

QS Network Time Limit: 1000ms Memory Limit: 32768KB This problem will be judged on FZU. Original ID: 1096 64-bit integer IO format: %I64d      Java class name: Main In the planet w-503 of galaxy cgb, there is a kind of intelligent creature named QS.

zoj 1586

//zoj 1586#include<iostream>#include<cstdio>using namespace std;#define N 1005int a[N][N],low[N],n,ans;int b[N]; int min(int x,int y){ return x<y?x:y; } void prim(int u0){ int i,j,m,k; ans=0; for (i=1;i<n;i++) low[i]=a[u0][i]; low[u0]=-1