牛客小白月賽16 小雨坐地鐵 建虛點最短路

2021-09-25 06:14:33 字數 1923 閱讀 2085

時間限制:c/c++ 1秒,其他語言2秒

空間限制:c/c++ 524288k,其他語言1048576k

64bit io format: %lld

小雨所在的城市一共有 mm 條地鐵線,分別標號為 1 號線,2 號線,……,m 號線。整個城市一共有 nn 個車站,編號為 1∼n1∼n 。其中坐 i 號線需要花費 aiai 的**,每坐一站就需要多花費 bibi 的**。i 號線有 cici 個車站,而且這 cici 個車站都已知,如果某一站有多條地鐵線經過,則可以在這一站換乘到另一條地鐵線,並且能多次換乘。現在小雨想從第 ss 個車站坐地鐵到第 tt 個車站,地鐵等待時間忽略不計,求最少花費的**,若不能到達輸出-1。(地鐵是雙向的,所以 ss 可能大於 tt)

第一行輸入四個正整數 n,m,s,tn,m,s,t,分別表示車站個數,地鐵線數,起點站和終點站。

第二行到第 m+1m+1 行,每行前三個數為 ai,bi,ciai,bi,ci,分別表示坐 i 號線的**,i 號線每坐一站多花的**,i 號線車站個數。接下來 cici 個數,表示 i 號線的每乙個車站的編號,單調遞增。

共一行,乙個數表示最小花費,若不能到達輸出 -1 。
示例1

複製

5 2 1 4

2 2 3 1 3 5

2 1 4 2 3 4 5

複製

7
坐 1 號線:花費 2;

1→31→3:花費 2;

換乘 2 號線:花費 2;

3→43→4:花費 1;

所以最小總花費為 7 。

1≤n≤103,1≤m≤500,1≤s,t≤n1≤n≤103,1≤m≤500,1≤s,t≤n

1≤ai,bi≤100,1≤ci≤n,m∑i=1ci≤105

建m+1層圖,第m+1是虛點,到達這個點不消耗權值,這樣就實現了站點連線了,連邊後最短路即可,不知道為什麼我的最短路寫著寫著就寫成了迷宮的最短路,導致一直在wa,以後注意點,迪傑斯特拉最短路和迷宮的不是同一類。。。。

官方題解:

/*簡化版*/

#include#define rep(i,a,b) for(int i=a;i<=(b);++i)

#define mem(a,x) memset(a,x,sizeof(a))

#define pb push_back

using namespace std;

typedef long long ll;

const int n=1e3+10,m=520;

const int maxn=5e5+100;

int n,m,s,t,a[n],b[n];

vectorg[n*m];

int sub[n*m];

bool vis[n*m];

int dis[n*m];

struct node);

dis[s]=0;

while(que.size()));}}

}if(dis[t]==0x3f3f3f3f)

printf("-1\n");

else printf("%d\n",dis[t]);

}int main()

} mem(dis,0x3f3f3f3f);

if(s==t)

a[0]=b[0]=0;

s=500*n+s;

t=500*n+t;

bfs();

return 0;

}

牛客網 小白月賽16 J題 小雨坐地鐵

題意 多條地鐵線路,從起點到終點的最短路。題解 使用分層圖最短路。很容易想到建 m 層圖,如果多條地鐵線都經過同乙個點,則在這些點之間暴力兩兩連邊,這樣連邊是 o nm2 我們可以多建一層虛點,所有點到它對應的虛點不需要代價,從虛點到它對應的點需要對應的代價,這樣就可以優化到 o nm 建圖。最後跑...

牛客小白月賽16 小雨的矩陣 (暴力搜尋)

時間限制 c c 1秒,其他語言2秒 空間限制 c c 262144k,其他語言524288k 64bit io format lld 小雨有乙個 n nn times nn n 的矩陣,起點在 1,1 終點在 n,n 只能向下或向右走,且每次只能走 1 步。矩陣上每個點都有乙個點權 ai,ja a...

牛客小白月賽16

很容易得到n 1時,因為小石先手,所以小石一定輸 而n!1時,假設n 5 小石先取1 小陽取2 4 小石去3 小陽輸,無論怎樣小石都有贏的機會 includeusing namespace std int main 打表求出1 1e3之間的所有三角形每層之和 include define ll lo...