本來以為對最小生成樹的學習告一段落了,昨晚跟波波聊的時候他說prim不一定比kruskal慢,於是我就拿1789來開刀。果然,於是我先用kruskal,ac,1641ms,恩,不錯.再用prim寫,一交,果然timelimitexeeded!!看來波波錯了,但是他是已經ac了的..看看他的時間,只有375ms,不算cin的時間消耗他的程式比我快了足足3倍!!看他的解題報告,原來他用的儲存結構和我的不一樣..換他的那種方法試試,ac,282ms.orz,幸好有他提醒,不然我就用kruskal一輩子了...現在把1789貼出來,等會兒再刷幾道最小生成樹的~
accecpttime: 2008-12-22 10:30:23
language: c++
memory: 15624k
time: 282ms
errors: 2 tl
algorithm: prim
#include
#include
#include
#include
using
namespace std;
// 最大值
#define inf 99999999
// 最多的邊數
#define n 2000
// 路徑儲存
int road[n][n];
char type[n][8];
int main()
}//prim最小生成樹
res = 0;
int lesscost[n];
for(i = 0; i < n;i++)
lesscost[i] = road[0][i];
for( i = 1; i < n ;i++)
res += min;
// 將剛加入集合的節點的所有邊和現有邊做乙個比較,保留小的邊
for(j = 0; j < n;j++)
if(lesscost[j] > road[mink][j])
lesscost[j] = road[mink][j];
}printf("the highest possible quality is 1/%d./n",res);}}
杭電1789 貪心
題目大意 有 t 組資料,每組資料報含乙個n,n個作業的截止日期 和 遲交要扣的分數,問做完這些作業扣的最少分數是多少?1 include 2 include 3 include 4 include 5 include 6 include 7 include 8 include 9 include ...
POJ 1789 解題報告
這道題是求最小生成樹。很久之前是用kruskal演算法求的 之前已經用過這個模板很多次 但是超時了,這裡是稠密圖,對所有邊排序是非常耗時的操作。這裡改用沒有優化的prim演算法 用的是陣列而不是heap,這意味著每次選最近的節點都需要過一遍陣列,o n 但是還是很輕鬆地通過了。thestoryofs...
hdu1789 貪心 回溯
hdu1789 鏈結題目傳送 include include include includeusing namespace std define n 10010 int v n t,sum,n,flag struct node bool cmp node a,node b int main if f...