一道挺好的思維題。
題目鏈結
給定一張邊權均為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 難點在於如何處理擁有的紀念品。我們不妨在當天交易之前把持有的紀念品全部賣出,但你發現你不知道這一天的紀念品如何儲存,我們發現在每一天的最後把購置的紀念品全部以第二天的 賣出,就相當於在第二天一開始賣出,那麼為什麼一定在全部交易完後才賣呢?我們完全可以在買的同時用第二天的...