poj1125Stockbroker Grapevine
題目生詞比較多...
翻譯如下:
http://poj.org/showmessage?message_id=162255
首先,題目可能有多組測試資料,每個測試資料的第一行為經紀人數量N(當N=0時,輸入資料結束),然後接下來N行描述第i(1<=i<=N)個經紀人與其他經紀人的關系(教你如何畫圖)。
每行開頭數字M為該行對應的經紀人有多少個經紀人朋友(該節點的出度,可以為0),然後緊接着M對整數,每對整數表示成a,b,則表明該經紀人向第a個經紀人傳遞資訊需要b機關時間(即第i号結點到第a号結點的孤長為b),整張圖為有向圖,即弧Vij 可能不等于弧Vji(資料很明顯,這裡是廢話)。當構圖完畢後,求當從該圖中某點出發,将“消息”傳播到整個經紀人網絡的最小時間,輸出這個經紀人号和最小時間。最小時間的判定方式為——從這個經紀人(結點)出發,整個經紀人網絡中最後一個人接到消息的時間。如果有一個或一個以上經紀人無論如何無法收到消息,輸出“disjoint”(有關圖的連通性,你們懂得,但據其他同學說,POJ測試資料中不會有,就是說,你不判定,一樣能過,題目資料夠水的)。
以第一樣例為例:
3
2 2 4 3 5
2 1 2 3 6
2 1 2 2 2
總共3個經紀人,一号經紀人可向2個人傳遞資訊,向2号傳遞所需時間為4分鐘,向3号傳遞需5分鐘。二号經紀人可向2個人傳遞資訊,向1号需2分鐘,向3号需6分鐘。三号經紀人可向2人傳遞資訊,向1号需2分鐘,向2号需2分鐘。
(以上阿拉伯數字即為對應資料)将圖畫出,很容易得出,從3号出發,網絡中最後一個得到消息的,需2分鐘(可以同時向多人傳遞,有點不合情理)。
是以輸出為 3 2。
#include<iostream>
#include<stdio.h>
using namespace std;
#define INF 1000000000
int mp[10][10];//資料太弱了。。。。。
int main()
{
int N,n,i,j,k,min,max,y,c;
while(scanf("%d",&N),N)
{
for(i=1;i<=N;i++)
for(j=1;j<=N;j++)
mp[i][j]=INF;
for(i=1;i<=N;i++)
{
scanf("%d",&n);
for(j=1;j<=n;j++)
{
scanf("%d%d",&y,&c);
mp[i][y]=c;
}
mp[i][i]=0;
}
for(k=1;k<=N;k++)
for(i=1;i<=N;i++)
for(j=1;j<=N;j++)
if(mp[i][j]>mp[i][k]+mp[k][j])
mp[i][j]=mp[i][k]+mp[k][j];
int mark=1;
min=INF;
for(i=1;i<=N;i++)
{
max=0;
for(j=1;j<=N;j++)
if(max<mp[i][j])
max=mp[i][j];
if(min>max)
{
min=max;
mark=i;
}
}
printf("%d %d\n",mark,min);
}
return 0;
}