日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

历史

發(fā)布時(shí)間:2024/9/5 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 历史 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

?

3 歷史(history.c/cpp/pas)
3.1 題目描述
歷史學(xué)家小A正在研究一個(gè)奇怪的王國的歷史。當(dāng)前階段的任務(wù)是研究該國的交通。
根據(jù)這個(gè)奇怪的王國的史書記載,史書開始記載前這個(gè)王國有 n 個(gè)城市(城市從 0 開
始標(biāo)號(hào)),但所有城市之間都沒有道路相連。
每一年,在位的國王會(huì)修建一條 x 到 y 的雙向道路,一條道路可能被修建多次,但不會(huì)
修建起點(diǎn)和終點(diǎn)為同一個(gè)城市的道路。
而在這之間,國王會(huì)計(jì)劃進(jìn)行若干次旅行。對(duì)于計(jì)劃進(jìn)行的一次旅行 st->ed,如果當(dāng)
時(shí)能完成這次旅行,而 t 年前不能完成這次旅行,那么國王會(huì)對(duì)之前的建設(shè)成果感到滿意,
否則他會(huì)很生氣,并在下一次計(jì)劃旅行前都讓史官記錄下錯(cuò)誤的修建道路的信息,即把 x、
y 記作(x+n-c) mod n,(y+n-c) mod n。
當(dāng)然在這些年中也發(fā)生了若干次國王的交替,初始國王的 c 值為 0,而每個(gè)國王的 c 值
不一定相同,但在國王在位期間 c 值不會(huì)改變,新上位的國王開始處于不生氣的狀態(tài)。
請根據(jù)史書幫助小 A 得出國王每次對(duì)于計(jì)劃旅行是否滿意,從而輔助小 A 能夠研究該
國的交通信息。
3.2 輸入格式
第一行為兩個(gè)整數(shù) n,m,表示初始城市數(shù)和歷史書記載的內(nèi)容數(shù)。
接下來 m 行,每行是以下三種格式之一:
1 . K v :表示國王交替,新國王的 c 值為 v
2 . R x y:表示史書上記載的是國王修建了 x 到 y 的雙向道路,但注意這個(gè)記錄的可
能不是實(shí)際狀況。
3 . T st ed t:表示國王計(jì)劃進(jìn)行的一次 st->ed 的旅行,且比較的是 t 年前的情況(國
NOIP 模擬試題 #5
7
王可能會(huì)和史書開始記載以前的情況比較),注意這個(gè)記錄的肯定是實(shí)際情況。
注意只有遇到 R 操作才會(huì)使年份的計(jì)數(shù)+1。
3.3 輸出格式
輸對(duì)于每個(gè) T 的記錄輸出一行,如果此次計(jì)劃旅行令國王滿意,則輸出 Y,否則輸出 X。
3.4 樣例輸入
3 7
R 0 1
T 0 1 1
K 1
R 0 1
T 0 1 1
R 0 1
T 0 2 1
3.5 樣例輸出
Y
N
Y
3 .6 數(shù)據(jù)范圍與約定
對(duì)于 30%的數(shù)據(jù),保證 n<=1000 ,m<=3000。
另 30%的數(shù)據(jù)滿足沒有發(fā)生國王的交替。
NOIP 模擬試題 #5
8
對(duì)于 100%的數(shù)據(jù),保證 n,m<=300000,0<=v,x,y,st,ed<n,0<=t<m。
數(shù)據(jù)有梯度

?

思路:

  在線處理,用并查集記錄道路的連接情況,同時(shí)記錄每條邊的創(chuàng)建時(shí)間(這是為了找到t年前的道路連接情況)。

  注意查詢時(shí),有創(chuàng)建時(shí)間的限制。還有城市是從零開始的。

#include <cstdio> #include <algorithm> using namespace std; #define M 300009 int n,m; int f[M],sum[M],yr[M]; int anger,c,year,x,y,st,ed,t; int find(int x,int t) {while(x!=f[x] && yr[x]<=t) x=f[x];return x; } int main() {scanf("%d%d",&n,&m);for(int i=0;i<=n;i++) f[i]=i,sum[i]=1;char C;while(m--){cin>>C;if(C=='K'){scanf("%d\n",&c);anger=0;continue;}if(C=='R'){scanf("%d%d",&x,&y);if(anger){x+=c,y+=c;x%=n,y%=n; }year++;x=find(x,year);y=find(y,year);if(x == y) continue;if(sum[x] < sum[y]) {f[x] = y;sum[y] += sum[x];yr[x] = year;}else {f[y] = x;sum[x] += sum[y];yr[y] = year;}continue;}if(C=='T'){scanf("%d%d%d",&st,&ed,&t);if(anger=( find(st,year)^find(ed,year) ) || (find(st,year-t)==find(ed,year-t)))printf("N\n");else printf("Y\n");}}return 0; }

?樣例

3 3
R 0 1
R 0 2
T 0 2 2

輸出

Y

?

轉(zhuǎn)載于:https://www.cnblogs.com/CLGYPYJ/p/7486208.html

總結(jié)

以上是生活随笔為你收集整理的历史的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。