信使(信息学奥赛一本通-T1376)
【題目描述】
戰(zhàn)爭(zhēng)時(shí)期,前線有n個(gè)哨所,每個(gè)哨所可能會(huì)與其他若干個(gè)哨所之間有通信聯(lián)系。信使負(fù)責(zé)在哨所之間傳遞信息,當(dāng)然,這是要花費(fèi)一定時(shí)間的(以天為單位)。指揮部設(shè)在第一個(gè)哨所。當(dāng)指揮部下達(dá)一個(gè)命令后,指揮部就派出若干個(gè)信使向與指揮部相連的哨所送信。當(dāng)一個(gè)哨所接到信后,這個(gè)哨所內(nèi)的信使們也以同樣的方式向其他哨所送信。直至所有n個(gè)哨所全部接到命令后,送信才算成功。因?yàn)闇?zhǔn)備充足,每個(gè)哨所內(nèi)都安排了足夠的信使(如果一個(gè)哨所與其他k個(gè)哨所有通信聯(lián)系的話,這個(gè)哨所內(nèi)至少會(huì)配備k個(gè)信使)。
現(xiàn)在總指揮請(qǐng)你編一個(gè)程序,計(jì)算出完成整個(gè)送信過(guò)程最短需要多少時(shí)間。
【輸入】
第1行有兩個(gè)整數(shù)n和m,中間用1個(gè)空格隔開(kāi),分別表示有n個(gè)哨所和m條通信線路,且1≤n≤100。
第2至m+1行:每行三個(gè)整數(shù)i、j、k,中間用1個(gè)空格隔開(kāi),表示第i個(gè)和第j個(gè)哨所之間存在通信線路,且這條線路要花費(fèi)k天。
【輸出】
一個(gè)整數(shù),表示完成整個(gè)送信過(guò)程的最短時(shí)間。如果不是所有的哨所都能收到信,就輸出-1。
【輸入樣例】
4 4
1 2 4
2 3 7
2 4 1
3 4 6
【輸出樣例】
11
【源程序】
#include<iostream> #include<cstdio> #include<cstring> #include<cmath> #include<algorithm> #include<string> #include<cstdlib> #include<queue> #include<vector> #include<set> #define INF 0x3f3f3f3f #define PI acos(-1.0) #define N 101 #define MOD 123 #define E 1e-6 using namespace std; int g[N][N]; int main() {int n,m;cin>>n>>m;for(int i=1;i<=n;i++){for(int j=1;j<=n;j++){if(i==j)g[i][j]=0;elseg[i][j]=INF;}}for(int i=1;i<=m;i++){int x,y,w;cin>>x>>y>>w;g[x][y]=w;g[y][x]=w;}for(int k=1;k<=n;k++)for(int i=1;i<=n;i++)for(int j=1;j<=n;j++)if(g[i][j]>g[i][k]+g[k][j])g[i][j]=g[i][k]+g[k][j];int maxx=-INF;for(int i=1;i<=n;i++)if(g[1][i]>maxx)maxx=g[1][i];if(maxx==INF)cout<<"-1"<<endl;elsecout<<maxx<<endl;return 0; }?
總結(jié)
以上是生活随笔為你收集整理的信使(信息学奥赛一本通-T1376)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 数列分段Section I(洛谷-P11
- 下一篇: 迷宫(洛谷-P1605)