最小生成树模板克鲁斯卡尔poj1258

来源:互联网 发布:单片机usb通讯协议 编辑:程序博客网 时间:2024/05/17 22:52
我很弱啊!!!连最小生成树也要做模板。。。。。
#include<iostream>#include<cstdio>#include<algorithm>using namespace std;struct edgee{int u, v,cost;};edgee edge[20000];int fa[2000];int n,tot,ans;int findfa(int num){if (fa[num] != num)fa[num] = findfa(fa[num]);return fa[num];}void init(){for (int i = 1; i <= n; i++)fa[i] = i;}bool unionn(int u, int v){int fau = findfa(u);int fav = findfa(v);if (fav != fau){fa[fav] = fau;return true;}elsereturn false;}bool com(edgee a, edgee b){return a.cost < b.cost;}void kurscal(){sort(edge, edge + tot, com);for (int i = 0; i < tot; i++){int u = edge[i].u; int v = edge[i].v;if (unionn(u, v))ans += edge[i].cost;}printf("%d\n", ans);}int main(){while (scanf("%d", &n) != EOF){ans = 0;tot = 0;//cout << n << endl;init();for (int i = 1; i <= n; i++){for (int j = 1; j <= n; j++){int q;scanf("%d", &q);if (j > i){edge[tot].u = i;edge[tot].v = j;edge[tot].cost = q;tot++;}}}///for (int i = 0; i < tot; i++)//cout << "from:" << edge[i].u << " " << "to:" << edge[i].v <<" "<<"cost:"<<edge[i].cost<< endl;kurscal();}return 0;}

原创粉丝点击