題意:第一行輸入乙個數n,表示有n個節點,之後的n行,第i+1行第乙個數表示i節點的子節點個數,接著i對數,每對數a,b表示i到a有一條長度為b的邊。輸入直到n==0結束。
讓你選擇乙個點,目的是讓這個點散播訊息,使得這個點能以最快的速度把訊息散播到其他所有點。輸出格式為這個點以及散播時間。
注意:有可能圖不連通,對應無解情況;散播時間就是散播到最後乙個點的時間,就是距離起始點最遠的乙個點。當然我們要讓他散播的盡量快,所以把訊息散播到其他點都是走最短路。
這道題floyd演算法就可以解決,比起模板**,只是多了乙個迴圈,求出這個點到最遠的乙個點的距離(不是最長路)。
#include #include #include using namespace std;
int n, d[101][101], dx[101], f[101];
int find(int x)
int main()
} if(f[0] != n-1)
for(int k = 1; k <= n; k++)
for(int i = 1; i <= n; i++)
for(int j = 1; j <= n; j++)
if(i != j && j != k && i != k)
d[i][j] = min(d[i][j], d[i][k]+d[k][j]);
for(int i = 1; i <= n; i++)
for(int j = 1; j <= n; j++)
if(i != j && d[i][j] < 2e10) dx[i] = max(dx[i], d[i][j]);
int ans, time = 1<<30;
for(int i = 1; i <= n; i++)
if(dx[i] < time) ans = i, time = dx[i];
printf("%d %d\n", ans, time);
}}
poj1125最短路模板
簡單的模板應用,就是求圖中各個點中,每個點到其餘各點最大距離的最小值。include include include using namespace std define maxn 110 define maxint 999999 int ans maxn the longest distance ...
poj 1125 求起點的最短路
題意 有n個人每個人可以把謠言傳給一些人,傳給每個人有一定的時間,求出你把謠言傳給誰,讓所有的人都知道的時間最短。思路 列舉每個點為起點,到所有點的距離的最大值就是該點為起點所消耗的時間,求出最小值就可以了,因為給的n較小,直接 floyd就可以了。include includeconst int ...
HDU 2544 最短路 最短路裸題
time limit 1000ms memory limit 32768kb 64bit io format i64d i64u submit status description 在每年的校賽裡,所有進入決賽的同學都會獲得一件很漂亮的t shirt。但是每當我們的工作人員把上百件的衣服從商店運回到...