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...