這道題是求最小生成樹。很久之前是用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...