1998 Fsk物品排程 並查集

2021-07-22 07:52:54 字數 991 閱讀 3719

題意:給出乙個陣列c[

i],求乙個陣列po

s[i]

=d∗x

i+yi

+c[i

] 滿足對於任意

j<

i ,po

s[i]

!=po

s[j]

。並且滿足最小化 yi

的前提下最小化 xi

後面的不說了。

從前到後列舉,如果當前點沒有被訪問過,從當前點

i 開始列舉(i

+d)%

n,這樣會有乙個環。當y

i+1 時會從當前環轉移到其他環,因此如果c[

i]所對應的環上的點還有剩餘那麼從當前環上取乙個點,否則增加 yi

,從其他環上選點。

可以用類似並查集的東西維護一下。

#include 

using namespace std;

#define n 110000

#define ll long long

int t,n,s,q,p,m,d;

int c[n],use[n],vis[n],pos[n],cnt[n],bel[n];

int fa[n],done[n];

int find(int

x) return find(fa[x]);

}int main()

fa[s]=(s+d)%n;cnt[bel[s]]--;

for(int i=1,t;ipos[i]=find(c[i]%n);

if(--cnt[bel[pos[i]]])

fa[pos[i]]=find((pos[i]+d)%n);

}for(int i=0;iif(!vis[i])

if(cnt==1)continue;

ans+=cnt+1-flag;

}printf("%d\n",ans);

}return

0;}

奇數階魔方 1998

problem description 乙個 n 階方陣的元素是1,2,n 2,它的每行,每列和2條對角線上元素的和相等,這樣 的方陣叫魔方。n為奇數時我們有1種構造方法,叫做 右上方 例如下面給出n 3,5,7時 的魔方.38 1 6 3 5 7 4 9 2 517 24 1 8 15 23 5 ...

NOIP1998 題解報告

luogu p1011 車站 luogu p1012 拼數 luogo p1013 進製位 luogu p1011 車站題目傳送門 這題看起來就很斐波那契 我們直接推式子即可,設第二站上車下車的人數均為 b 設 f i 為到達第 i 站時的人數,up i 為第 i 站上車的人數,down i 為第 ...

NOI1998 圍巾裁剪

裁縫有一塊非常珍貴的絲綢圍巾。可惜的是,圍巾的某些部分已經被蛀蟲給咬壞了。裁縫當然不願意就這麼把圍巾給丟了,於是,他想把圍巾給裁成兩塊小圍巾送給他的兩個女兒。自然,兩塊小圍巾的面積之和越大越好。這塊圍巾是乙個正三角形,三條邊被均勻地分成了n段,即這個正三角形被均勻地分成了n2個單元,每個單元是乙個面...