眾所周知,why 是czyz 王國的國王。
czyz 王國一共有n 個城市,每個城市都有一條道路連向乙個城市(可能連向這個城市自己)。
同時,對於每乙個城市,也只有一條道路連向它。
如果乙個人可以通過道路可以從城市x 走向城市y,那麼我們稱(x,y) 這
個數對是滿足條件的。(x 可以等於y)
現在why 可以選擇2 個城市改變他們連向的道路,且改變完成之後也要滿足上述的條件。
why 想知道,經過這個操作後,最多能有多少滿足條件的數對。
第一行包括乙個整數n, 表示城市數。
第二行包括n 個整數a[i],表示i 有一條道路連向a[i]。
輸出一行乙個整數,表示最多能得到多少滿足條件的數對。
input1
input2
2 1 3
1 5 4 3 2
output1
output2 917
對於樣例1,不需要改變,每兩個城市之間可以相互到達,ans=3*3=9。
對於樣例2,change a[2] to 4, a[3] to 5。
對於20% 的資料滿足:n ≤ 10。
對於50% 的資料滿足:n ≤ 100。
對於70% 的資料滿足:n ≤ 1000。
對於100% 的資料滿足:n ≤ 10^6, 1 ≤ a[i] ≤ n。
這道題真沒想到會超時呢
#includeusingnamespace
std;
intn;
int a[1000000
];bool flag[1000000
];int xfindy(int x,int y,int depth)
int count(int
start)
intmain()
//特判:完美的環
if(count(n-2)==n)
//把兩個最大的環合併
//for(int i=1;i<=n;i++)
long
long ans=0,max1=-0x3f3f3f,max2=max1,city1=-1,city2=-1
;
for(int i=1;i<=n;i++)
} for(int i=1;i<=n;i++)
} memset(flag,
0,sizeof
(flag));
flag[
0]=1
;
for(int i=1;i<=n;i++)
ans+=pow(max1+max2,2
); cout
}
把互相連著的城市分開一條邊,而形成乙個環
連通性問題?
如果形成了乙個完整的環,那麼ans=n^2
如果沒有呢?
如果兩步之內,不能夠形成完美的環呢?
兩步,可以把兩個環合併!
優先把本身環大的city指向另乙個有大環的city,而不是指向少數city圍成的環
檢測有沒有指向自己的環
再檢測環city小的環
牛客提高D6t2 破碎的序列
分析 我們不難發現對於偶數的情況只要相鄰兩個數不相等即可 而對於奇數的情況只要中間恰好隔乙個數的兩個數不相等即可 於是我們又dp i 0 1 表示考慮到第i位,這一位和它後面離它最近的乙個確定的數是否相等 每次從i 1轉移即可 注意對於奇數的情況最終答案要n 1和n的dp值相乘以保證合法 inclu...
嵊州D5T2 摺紙 folding
問題描述 在非常緊張的 noip 考試中,有人喜歡啃指甲,有人喜歡轉鉛筆,有人喜歡撕 紙條,而小 x 喜歡迷摺紙。現有乙個 w h 的矩形紙張,監考老師想知道,小 x 至少要折多少次才能使 矩形紙張變成 w h 的矩形紙張。注意,每次的摺痕都要平行於紙張的某一條邊。輸入格式 第一行包括兩個整數 w,...
嵊州普及Day2T2
題意 對於n個數的數列,進行排列,求第m個大於此數列的數列。思路 查詢後2個是否逆序,若是,將後3個遞迴。如此運算,找後面大於此數中最小數交換,然後將後面數列順序排列。相對簡單。見 include include include include include using namespace std...