NYOJ247 虛擬城市之旅 (spfa)

2022-05-09 01:06:11 字數 1990 閱讀 3325

時間限制:3000 ms  |  記憶體限制:65535 kb

難度:6

描述展館是未來城市的縮影,個人體驗和互動是不變的主題。在a國展館通過多維模式和高科技手段,引領參觀者在展示空間踏上一段虛擬的城市之旅。

夢幻國有n個城市和m條道路,每條道路連線某兩個城市。任意兩個城市之間最多只有一條道路直接相連。這m條道路中有一部分為單向通行的道路,一部分為雙向通行的道路。

夢幻國幅員遼闊,各地的資源分布情況各不相同,這就導致了同一種商品在不同城市的**不一定相同。但是,同一種商品在同乙個城市的**價和賣出價始終是相同的。

現在你已踏上一段虛擬的城市之旅。為了給你乙個意外收穫,允許你在旅遊的同時,利用 x 商品在不同城市中的差價賺回一點旅費,但最多只能交易一次。即,在某個城市**x 商品,可以走到另外乙個城市買掉來獲得旅費。當然,在賺不到差價的情況下,你也可以不進行**活動。

設夢幻國n個城市的標號從1~ n,你只能從1 號城市出發,並最終在n 號城市結束自己的旅行。在旅遊的過程中,任何城市可以重複經過多次,但不要求經過所有n個城市。

例如:夢幻國有5個大城市,城市的編號和道路連線情況如下圖,單向箭頭表示這條道路為單向通行,雙向箭頭表示這條道路為雙向通行。假設 x 商品在1~5 號城市的**分別為 4,3,5,6,1。

你也可以選擇如下一條線路14545,並在第1次到達5號城市時以1的****x 商品,在第2次到達4號城市時以6 的**賣出x 商品,賺取的旅費數為5。

現在給出n個城市的x 商品**,m條道路的資訊(每條道路所連線的兩個城市的編號以及該條道路的通**況)。請問你能賺取盡可能多的旅費嗎。

輸入有多組測試資料(以eof為檔案結束的標誌)

每組測試資料的格式如下:

第一行:n m 分別表示城市的數目和道路的數目。

第二行:n個正整數,每兩個整數之間用乙個空格隔開,分別表示1到n個城市的商品**。

接下來 m行,每行有3個正整數,x,y,z,每兩個整數之間用乙個空格隔開。

如果 z=1,表示這條道路是城市x到城市y之間的單向道路;

如果z=2,表示這條道路為城市x 和城市y之間的雙向道路。

1≤n≤100000,1≤m≤500000,

1≤x,y≤n,1≤z≤2,1≤商品**≤100。

輸出輸出1個整數,表示最多能賺取的旅費。如果沒有進行**,則輸出0。

樣例輸入

5 5

4 3 5 6 1

1 2 1

1 4 1

2 3 2

3 5 1

4 5 2

樣例輸出

5
思路:題意很明顯,找乙個點,起點能到達它,並且還能回到終點,並且,差值最大。直接暴力,然後就超時。看了題解,發現用的時spfa,雙向跑圖。

ac**:(鄰接表)

#includeusing namespace std;

const int max = 100010;

int a[max], b[max];//a放最小值,b放最大值

vectorg1[max];//存圖

vectorg2[max];

void spfa(int s, int n)

} }//下面是反向的。都一樣

mark2[n] = 1;

q.push(n);

while(!q.empty())

} }int ans = 0;

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

printf("%d\n", ans);

}int main()

memset(g1, sizeof(g2), 0);

memset(g2, sizeof(g2), 0);

while(m--)

} spfa(1, n);

}}

還有就是用前向星代替vector

這個是介紹前向星的blog:點選開啟鏈結

前向星題解, 推薦blog:點選開啟鏈結

NYOJ 24 素數距離問題

時間限制 3000 ms 記憶體限制 65535 kb難度 2 描述 現在給出你一些數,要求你寫出乙個程式,輸出這些整數相鄰最近的素數,並輸出其相距長度。如果左右有等距離長度素數,則輸出左側的值及相應距離。如果輸入的整數本身就是素數,則輸出該素數本身,距離輸出0 輸入第一行給出測試資料組數n 0輸出...

NYOJ24 素數距離問題

時間限制 3000 ms 記憶體限制 65535 kb 難度 2 描述 現在給出你一些數,要求你寫出乙個程式,輸出這些整數相鄰最近的素數,並輸出其相距長度。如果左右有等距離長度素數,則輸出左側的值及相應距離。如果輸入的整數本身就是素數,則輸出該素數本身,距離輸出0 輸入第一行給出測試資料組數n 0輸...

nyoj 24 素數距離問題

時間限制 3000 ms 記憶體限制 65535 kb難度 2 描述 現在給出你一些數,要求你寫出乙個程式,輸出這些整數相鄰最近的素數,並輸出其相距長度。如果左右有等距離長度素數,則輸出左側的值及相應距離。如果輸入的整數本身就是素數,則輸出該素數本身,距離輸出0 輸入第一行給出測試資料組數n 0輸出...