poj 3463(dijk貪心思想的應用)

2021-05-28 15:08:36 字數 1178 閱讀 3844

題意是找出最短路徑以及比最短路徑大一的路徑的總的路徑條數。。。。。。

貪心思想來求解最短路,並且記錄最短和次短,以及出現的次數:

當前長度len 的四個處理:

1. 比最短要小。。。。更新最短和次短

2. 等於最短。。。。。更新最短次數

3. 比次短要小。。。。更新次短

4. 等於次短。。。。。更新次短次數

然後可以用stl的堆或者手寫堆也可以。。。。主要是加快效率的。。。。。

#include #include#include#includeusing namespace std;

const int m = 1005, inf = 1 << 30;

#define cc(m,v) memset(m,v,sizeof(m))

struct edge[10 * m];

int dis[m][2], cnt[m][2], vis[m][2];

int head[m], k;

struct node

bool operator<(const node & a) const

};priority_queueq;

void addedge(int u, int v, int len)

void dijkstra(int s, int n)

dis[v][0] = len, cnt[v][0] = cnt[u.v][u.flag];

q.push(node(v, 0));

} else if (len == dis[v][0]) cnt[v][0] += cnt[u.v][u.flag];

else if (len < dis[v][1]) else if (len == dis[v][1]) cnt[v][1] += cnt[u.v][u.flag];}}

}void ainit()

int main(int argc, char** argv)

scanf("%d%d", &s, &t);

dijkstra(s, n);

ans = cnt[t][0];

if (dis[t][0] == dis[t][1] - 1) ans += cnt[t][1];

printf("%d\n", ans);

}return 0;

}

超級書架(貪心思想)

題面 from luogu 超級書架 farmer john最近為奶牛們的圖書館添置了乙個巨大的書架,儘管它是如此的大,但它還是幾乎瞬間就被各種各樣的書塞滿了。現在,只有書架的頂上還留有一點空間。所有n 1 n 20,000 頭奶牛都有乙個確定的身高h i 1 h i 10,000 設所有奶牛身高的...

Poj 2287 田忌賽馬解題詳解(貪心思想)

題意是 田忌賽馬的故事,兩個人賽馬,第一行輸入的數是兩個人馬的匹数,都是相同的,第二行輸入的是田忌的馬的強弱值,第三行輸入的是國王馬的強弱值,然後如果n 0則程式結束。解題思路 貪心思想 如果田忌的最強馬大於國王的最強馬直接比 如果田忌的最強馬小如國王的最強馬拿最弱的那匹馬跟國王的最強馬比 如果田忌...

最優合併問題 貪心思想

最優合併問題 description 給定k 個排好序的序列s1 s2,sk 用2 路合併演算法將這k 個序列合併成乙個序列。假設所採用的2 路合併演算法合併2 個長度分別為m和n的序列需要m n 1次比較。試設計乙個演算法確定合併這個序列的最優合併順序,使所需的總比較次數最少。為了進行比較,還需要...