題目描述
又到暑假了,住在城市a的car想和朋友一起去城市b旅遊。她知道每個城市都有四個飛機場,分別位於乙個矩形的四個頂點上,同乙個城市中兩個機場之間有一條筆直的高速鐵路,第i個城市中高速鐵路了的單位里程**為ti,任意兩個不同城市的機場之間均有航線,所有航線單位里程的**均為t。
圖例(從上而下)
機場 高速鐵路
飛機航線
注意:圖中並沒有
標出所有的鐵路與航線。
那麼car應如何安排到城市b的路線才能盡可能的節省花費呢?她發現這並不是乙個簡單的問題,於是她來向你請教。
找出一條從城市a到b的旅遊路線,出發和到達城市中的機場可以任意選取,要求總的花費最少。
輸入輸出格式
輸入格式:
第一行為乙個正整數n(0<=n<=10),表示有n組測試資料。
每組的第一行有四個正整數s,t,a,b。
s(0
#include
#include
#include
#include
#include
#define n 500
using
namespace
std;
inline
char gc()
return *s++;
}inline
int read()
return x;
}struct nodedata[n*n*2];
int h[n],num,tt,s,a,b,t,x[n][4],y[n][4],t[n];bool flag[n];
double f[n];
inline
int calc(int x,int y)
inline
double calc1(int i,int j,int z)
inline
double calc2(int i,int k,int j,int z)
inline
void insert1(int x,int y,double z)
void spfa()}}
}} int main()
}for (int j=1;j<=3;++j) if (j!=id1&&j!=id2) id3=j;int id4=4;
x[i][4]=x[i][id1]+x[i][id2]-x[i][id3];y[i][4]=y[i][id1]+y[i][id2]-y[i][id3];
insert1(calc(i,id1),calc(i,id2),calc1(i,id1,id2)*t[i]);
insert1(calc(i,id1),calc(i,id3),calc1(i,id1,id3)*t[i]);
insert1(calc(i,id1),calc(i,id4),calc1(i,id1,id4)*t[i]);
insert1(calc(i,id2),calc(i,id3),calc1(i,id2,id3)*t[i]);
insert1(calc(i,id2),calc(i,id4),calc1(i,id2,id4)*t[i]);
insert1(calc(i,id3),calc(i,id4),calc1(i,id3,id4)*t[i]);
}for (int i=1;i<=s;++i)}}
}spfa();double ans=1e10;
for (int i=1;i<=4;++i)printf("%.1f",ans);
}return
0;}
luogu P1027 Car的旅行路線
題面傳送門 顯然這是一道spf aspfa spfa 水題,難點在建邊。題目中給三個點求另乙個點,那麼只要找到對角線,然後把另乙個點對稱過去就好了。實現 include include include include define min a,b a b a b using namespace st...
luogu P1027 Car的旅行路線
又到暑假了,住在城市a的car想和朋友一起去城市b旅遊。她知道每個城市都有四個飛機場,分別位於乙個矩形的四個頂點上,同乙個城市中兩個機場之間有一條筆直的高速鐵路,第i個城市中高速鐵路了的單位里程 為ti,任意兩個不同城市的機場之間均有航線,所有航線單位里程的 均為t。圖例 從上而下 機場 高速鐵路 ...
洛谷P1027 Car的旅行路線
又到暑假了,住在城市a的car想和朋友一起去城市b旅遊。她知道每個城市都有四個飛機場,分別位於乙個矩形的四個頂點上,同乙個城市中兩個機場之間有一條筆直的高速鐵路,第i個城市中高速鐵路了的單位里程 為ti,任意兩個不同城市的機場之間均有航線,所有航線單位里程的 均為t。圖例 從上而下 機場 高速鐵路 ...