NOIP2019普及組T4 加工零件

2022-03-29 21:27:43 字數 1011 閱讀 9225

一道挺好的思維題。

題目鏈結

給定一張邊權均為1無向圖,共q次詢問,每次給出兩個引數a,l,詢問1號點到a號點之間是否存在長度為l的路徑,其中邊和點可以經過多次。

將1號點到每個點之間的路徑長度設為dis,則對於每個詢問,若l

當l>=min(dis[a])時,若存在dis[a]與l奇偶性相同,則必然有解,否則無解。

故,我們可先預處理出1號點到每個點的奇最短路和偶最短路,然後根據l的奇偶性,判斷l是否大於與其奇偶性相同的最短路的長度即可。

證明:先證充分性。

簡記dis[a]為d,由於d與l奇偶性相同,不妨設l=d+2*k(k∈n),那麼對於1號點和a號點,必然可以找到與這兩點中某一點u有直接邊相連的乙個點x,則可從u到x進行來回跑動,每次總距離會增加2,共跑k次,然後加上d,即可得到l的長度。充分性成立。

必要性可用反證法同理得證。

時間複雜度o(mlogn)。

#include #include #include #include #include #define x first

#define y second

using namespace std;

typedef pairpii;

const int n=1e5+10;

struct edgeedge[n<<1];int idx;

int h[n];

int vis[n][2],dis[n][2];

int n,m,q;

void add_edge(int u,int v,int w);h[u]=idx;}

void dijkstra()

if(dis[to][1]>dis[p.x][0]+1)

} }}

int main()

dijkstra();

while(q--)

else

}return 0;

}

2006NOIP普及組 T4 數列

p1062 數列 題目傳送門 方法一 看一下樣例 3 100 1,3,4,9,10,12,13 該序列實際上就是 3 0 3 1 3 0 3 1 3 2 3 0 3 2 3 1 3 2 3 0 3 1 3 2 只看次冪 0,1,1 0,2,2 0,2 1,2 1 0 再看看1 n的二進位制 舉個例子...

noip 2017 普及組 T4 跳房子

跳房子,也叫跳飛機,是一種世界性的兒童遊戲,也是中國民間傳統的體育遊戲之一。跳房子的遊戲規則如下 在地面上確定乙個起點,然後在起點右側畫 n 個格仔,這些格仔都在同一條直線上。每個格仔內有乙個數字 整數 表示到達這個格仔能得到的分數。玩家第一次從起點開始向右跳,跳到起點右側的乙個格仔內。第二次再從當...

NOIP2019普及組紀念品

不廢話了,傳送門 p5662 難點在於如何處理擁有的紀念品。我們不妨在當天交易之前把持有的紀念品全部賣出,但你發現你不知道這一天的紀念品如何儲存,我們發現在每一天的最後把購置的紀念品全部以第二天的 賣出,就相當於在第二天一開始賣出,那麼為什麼一定在全部交易完後才賣呢?我們完全可以在買的同時用第二天的...