51Nod 1649 齊頭並進

2021-08-18 14:26:49 字數 1994 閱讀 2720

1649 齊頭並進

codeforces

基準時間限制:1 秒 空間限制:131072 kb 分值: 10 

難度:2級演算法題

在乙個叫奧斯汀的城市,有n個小鎮(從1到n編號),這些小鎮通過m條雙向火車鐵軌相連。當然某些小鎮之間也有公路相連。為了保證每兩個小鎮之間的人可以方便的相互訪問,市長就在那些沒有鐵軌直接相連的小鎮之間建造了公路。在兩個直接通過公路或者鐵路相連的小鎮之間移動,要花費乙個小時的時間。

現在有一輛火車和一輛汽車同時從小鎮1出發。他們都要前往小鎮n,但是他們中途不能同時停在同乙個小鎮(但是可以同時停在小鎮n)。火車只能走鐵路,汽車只能走公路。

現在請來為火車和汽車分別設計一條線路;所有的公路或者鐵路可以被多次使用。使得火車和汽車盡可能快的到達小鎮n。即要求他們中最後到達小鎮n的時間要最短。輸出這個最短時間。(最後火車和汽車可以同時到達小鎮n,也可以先後到達。)

樣例解釋:

在樣例中,火車可以按照 1⟶

3⟶4 行駛,汽車 1⟶

2⟶4 按照行駛,經過2小時後他們同時到過小鎮4。

input

單組測試資料。

第一行有兩個整數n 和 m (2≤n≤400, 0≤m≤n*(n-1)/2) ,表示小鎮的數目和鐵軌的數目。

接下來m行,每行有兩個整數u 和 v,表示u和v之間有一條鐵路。(1≤u,v≤n, u≠v)。

輸入中保證兩個小鎮之間最多有一條鐵路直接相連。

output

輸出乙個整數,表示答案,如果沒有合法的路線規劃,輸出-1。
input示例

4 2

1 33 4

output示例

2

system message

(題目提供者)

乙個最短路徑問題,注意要求兩次從1到n的最短路徑才行

我的思路是將圖的鄰接矩陣設為布林型(待會就知道為什麼了),然後輸入火車線路,此時進行第一次求最短路徑,結果儲存在ans1裡,然後將整個矩陣取非(題意兩個城市之間必有鐵路或公路,此時就變成了公路的鄰接矩陣了),然後再對汽車求一次最短路徑,結果儲存在ans2裡,但是,題目要求火車和汽車必須都到達n才能輸出較長的到達時間,所以有三種情況:

1.火車或汽車不能到達,此時輸出-1

2.火車比汽車先到達,輸出汽車到達所需的時間

3.汽車比火車先到達,輸出火車到達所需的時間

下面是**↓↓↓

#include #include #define maxn 410

#define inf 0x3f3f3f3f

bool vis[maxn];

bool map[maxn][maxn];

int path[maxn];

int dij( int n)

for( int i=1 ; ipath[j] )

} //去往最小值

vis[pos] = true;

//更新最短路徑

for( int j=1 ; j<=n ; j++ )

} return path[n];

}//鄰接矩陣取反

void not( int n ) }}

//驗證矩陣取反正確性

//void out( int n )

// printf( "\n" );

// }

// printf( "\n");

//}int main()

//儲存火車到達時間

int ans1 = dij(n);

// out(n);

//取反

not(n);

// out(n);

//儲存汽車到達時間

int ans2 = dij(n);

//一方不能到達輸出-1

if( ans1==inf || ans2==inf )

printf( "-1\n" );

else

}

51nod 1649 齊頭並進

1649 齊頭並進 現在有一輛火車和一輛汽車同時從小鎮1出發。他們都要前往小鎮n,但是他們中途不能同時停在同乙個小鎮 但是可以同時停在小鎮n 火車只能走鐵路,汽車只能走公路。現在請來為火車和汽車分別設計一條線路 所有的公路或者鐵路可以被多次使用。使得火車和汽車盡可能快的到達小鎮n。即要求他們中最後到...

51nod1649齊頭並進

1649 齊頭並進 基準時間限制 1 秒 空間限制 131072 kb 分值 10 難度 2級演算法題 在乙個叫奧斯汀的城市,有n個小鎮 從1到n編號 這些小鎮通過m條雙向火車鐵軌相連。當然某些小鎮之間也有公路相連。為了保證每兩個小鎮之間的人可以方便的相互訪問,市長就在那些沒有鐵軌直接相連的小鎮之間...

51Nod 1649 齊頭並進(最短路)

題目鏈結 在乙個叫奧斯汀的城市,有n個小鎮 從1到n編號 這些小鎮通過m條雙向火車鐵軌相連。當然某些小鎮之間也有公路相連。為了保證每兩個小鎮之間的人可以方便的相互訪問,市長就在那些沒有鐵軌直接相連的小鎮之間建造了公路。在兩個直接通過公路或者鐵路相連的小鎮之間移動,要花費乙個小時的時間。現在有一輛火車...