POJ 1789 解題報告

2021-07-04 16:39:16 字數 1188 閱讀 9692

這道題是求最小生成樹。很久之前是用kruskal演算法求的(之前已經用過這個模板很多次),但是超時了,這裡是稠密圖,對所有邊排序是非常耗時的操作。這裡改用沒有優化的prim演算法(用的是陣列而不是heap,這意味著每次選最近的節點都需要過一遍陣列,o(n))。但是還是很輕鬆地通過了。

thestoryofsnow

1789

accepted

160k

438ms

c++1591b

/* 

id: thestor1

lang: c++

task: poj1789

*/#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std;

const int maxn = 2000;

bool inset[maxn];

int dis[maxn];

// each line is a 7-character string

// therefore, the maximum difference is 7

const int maxdiff = 7;

char lines[maxn][maxdiff + 1];

int diff(int u, int v)

} return d;

}int minu(const int n)

} return u;

}int prim(const int n)

for (int i = 0; i < n; ++i)

int source = 0;

dis[source] = 0;

int mst = 0;

for (int i = 0; i < n; ++i)

}} }

return mst;

}int main()

// for (int i = 0; i < n; ++i)

// printf("the highest possible quality is 1/%d.\n", prim(n));

} return 0;

}

poj 1789 最小生成樹)

題意 給出n個卡車,每個卡車的型別是七個字元組成的,一種卡車可以從另一種卡車派生來的,代價是兩種卡車間型別不同字元的個數,求出這n中卡車派生的最小代價,n種車有一 種是開始就有的,n 1種是派生出來的。思路 因為剛開始有一種卡車,所以就是加n 1條把所有車連起來,就是最小生成樹了。include i...

POJ 1789 最小生成樹 Prim

題目描述 給予n個長度為7的字串,定義兩字串間的代價為同一位置不同的字元的個數,現在要聯通所有的字串求最小代價。思路 一開始使用krustal演算法,然而因為是稠密圖導致tle,換用prim。krustal tle include include include include define n 2...

poj1789 最小生成樹 prim

水題。題目大意 用乙個7位的字串代表乙個編號,兩個編號之間的distance代表這兩個編號之間不同字母的個數。乙個編號只能由另乙個編號 衍生 出來,代價是這兩個編號之間相應的distance,現在要找出乙個 衍生 方案,使得總代價最小,也就是distance之和最小。很容易想到,將每兩個頂點間的di...