NOIP2017模擬 做運動

2021-08-09 21:24:03 字數 1749 閱讀 6192

2017.10.26 t2 2011

樣例資料

輸入

5 6

1 2 1 2

2 3 2 2

3 4 3 4

4 5 3 5

1 3 4 1

3 5 3 6

1 5

輸出

3 24

分析:這道題正解我在考場上直接想出:並查集+dijkstra,具體思維過程如下:

1、「以最高溫度最低為前提」?怎樣才能保證走的路徑是最高溫度最低的呢?我想到了最小生成樹(是它的思想,就是並查集判斷是否連通),也就是將邊按照溫度從小到大排序,然後從頭開始連邊直到s和t連通,最後一條邊的溫度就是最高溫度的最小值(如果後面還有溫度一樣的也要加進來建邊,因為它們也是最高溫度的最小值)。

2、圖建好了,「吸收的熱量盡量少」,嗯,dijkstra裸題。

但是,我在用最小生成樹的思想的時候,就直接按著最小生成樹模板打了!本來,這道題是只要s和t還沒有連通就要把前面邊都加進來,但我就寫成只加能更新連通性的邊,這就意味著跑最短路的圖就gg了。

還好,資料雖然嚴格,我還是能過75%的。

**

不要問為什麼長得這麼怪,因為soj實在是卡,每次都要tle最後兩個測試點,我想了很多方法卡常,以至於搜到了一篇神犇的部落格卡常數技巧

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

using

namespace

std;

inline

int getint()

for(;isdigit(ch);ch=getchar())

sum=(sum<<3)+(sum<<1)+ch-48;

return sum*f;

}const

int maxn=500010;

const

int maxm=1000010;

struct nodebian[maxm];

int n,m,s,tt,maxt;

int fa[maxn];

int tot,first[maxn];

struct node2lin[maxm*2];

long

long dis[maxn];

priority_queuelong

long,int> >que;

inline

int getfa(int x)

inline

bool comp(const node &a,const node &b)

inline

void dijkstra()}}

}int main()}}

while(bian[++pos].t==maxt)

addedge(bian[pos].x,bian[pos].y,bian[pos].c);

dijkstra();

cout

<" "

<'\n';

return

0;}

本題結。

NOIP2017模擬 鴨舌

題目 小美喜歡吃鴨舌。有乙個 n 個點的樹,每個節點 i 第 i 個點上有 ai 個鴨舌。小美一開始處於 x 號點。每次小美可以選擇乙個與現在的點有邊的點而且那個點還有鴨舌,那麼小美會走到那個點並吃乙個鴨舌。要保證小美最後還是走到 x 號點。問小美最多能吃幾個鴨舌?輸入格式 輸入第一行乙個整數 n ...

NOIP2017模擬 區間

2017.11.3 t1 2032 樣例資料 輸入3 2 1 2 1 1 2 4 5輸出 2 6分析 這道題為什麼要放在t1 考得我懷疑人生。本來也只會暴力找,對於30 的資料我是這樣的 先離散化,再二維陣列記錄所有顏色的在每個位置的字首和,然後四層迴圈暴力查詢。而正解是 先離散化,再把每種顏色的每...

NOIP2017模擬 舉辦比賽

2017.8.27 t1 1946 樣例資料1 輸入5 5 1 2 3 4 5 輸出 樣例資料2 輸入10000000 10000000 555 888 777 666 12345 輸出 分析 第一次做這種隨機概率題 看到資料那麼大o n 的做法根本想不到就直接放棄了。結果就是個撞運氣的ffffff...