POJ 1789 最小生成树(裸..当模板用把)

来源:互联网 发布:第十域辅助软件 编辑:程序博客网 时间:2024/06/16 08:27

基本就是裸的算法

当模板用把。。

#include<stdio.h>#include<string.h>#include<algorithm>#include<vector>#include<queue>using namespace std;#define MAX 2014#define P pair<int,int>#define fst first#define sec second#define MS(x) memset(x,0,sizeof(x))char car[MAX][20];int d[MAX][MAX];int minCost[MAX];int used[MAX];int diff(char s1[],char s2[]){int di=0;for(int i=0;i<7;i++)if(s1[i]!=s2[i])di++;return di;}priority_queue<P,vector<P>,greater<P> > q;int main(){int n;while(scanf("%d",&n)&&n!=0){MS(d);MS(used);while(!q.empty())q.pop();for(int i=0;i<MAX;i++)minCost[i]=0x3f3f3f3f;for(int i=0;i<MAX;i++)for(int j=0;j<MAX;j++)d[i][j]=0x3f3f3f3f;for(int i=0;i<n;i++)scanf("%s",car[i]);for(int i=0;i<n;i++)for(int j=0;j<i;j++){int t=diff(car[i],car[j]);d[i][j]=d[j][i]=t;}q.push(P(0,0));int ans=0;for(int i=0;i<n;i++)// 这里一定要是 n 次因为第一次不算加边{while(used[q.top().sec])q.pop();P tp=q.top();q.pop();ans+=tp.fst;int v=tp.sec;used[v]=1;for(int j=0;j<MAX;j++){if(!used[j]&&d[v][j]<minCost[j]){q.push(P(d[v][j],j));minCost[j]=d[v][j];}}}printf("The highest possible quality is 1/%d.\n",ans);}return 0;}


0 0
原创粉丝点击