日本搞逼视频_黄色一级片免费在线观看_色99久久_性明星video另类hd_欧美77_综合在线视频

國內最全IT社區平臺 聯系我們 | 收藏本站
阿里云優惠2
您當前位置:首頁 > php開源 > 綜合技術 > Codeforces Round #383 (Div. 2) C. Arpa's loud Owf and Mehrdad's evil plan dfs+最小公倍數

Codeforces Round #383 (Div. 2) C. Arpa's loud Owf and Mehrdad's evil plan dfs+最小公倍數

來源:程序員人生   發布時間:2017-04-08 13:58:06 閱讀次數:4591次

C. Arpa's loud Owf and Mehrdad's evil plan
time limit per test
1 second
memory limit per test
256 megabytes
input
standard input
output
standard output

As you have noticed, there are lovely girls in Arpa’s land.

People in Arpa's land are numbered from 1 to n. Everyone has exactly one crush, i-th person's crush is person with the number crushi.

Someday Arpa shouted Owf loudly from the top of the palace and a funny game started in Arpa's land. The rules are as follows.

The game consists of rounds. Assume person x wants to start a round, he calls crushx and says: "Oww...wwf" (the letter w is repeatedt times) and cuts off the phone immediately. If t?>?1 then crushx calls crushcrushx and says: "Oww...wwf" (the letter w is repeated t?-?1times) and cuts off the phone immediately. The round continues until some person receives an "Owf" (t?=?1). This person is called theJoon-Joon of the round. There can't be two rounds at the same time.

Mehrdad has an evil plan to make the game more funny, he wants to find smallest t (t?≥?1) such that for each person x, if x starts some round and y becomes the Joon-Joon of the round, then by starting from yx would become the Joon-Joon of the round. Find such t for Mehrdad if it's possible.

Some strange fact in Arpa's land is that someone can be himself's crush (i.e. crushi?=?i).

Input

The first line of input contains integer n (1?≤?n?≤?100) — the number of people in Arpa's land.

The second line contains n integers, i-th of them is crushi (1?≤?crushi?≤?n) — the number of i-th person's crush.

Output

If there is no t satisfying the condition, print . Otherwise print such smallest t.

Examples
input
4
2 3 1 4
output
3
input
4
4 4 4 4
output
input
4
2 1 4 3
output
1
Note

In the first sample suppose t?=?3.

If the first person starts some round:

The first person calls the second person and says "Owwwf", then the second person calls the third person and says "Owwf", then the third person calls the first person and says "Owf", so the first person becomes Joon-Joon of the round. So the condition is satisfied if x is1.

The process is similar for the second and the third person.

If the fourth person starts some round:

The fourth person calls himself and says "Owwwf", then he calls himself again and says "Owwf", then he calls himself for another time and says "Owf", so the fourth person becomes Joon-Joon of the round. So the condition is satisfied when x is 4.

In the last example if the first person starts a round, then the second person becomes the Joon-Joon, and vice versa.



Source

Codeforces Round #383 (Div. 2)


My Solution

題意:當1個人開始是另外一個人結束,但這個人開始時前面那個人結束,具體還是請看題吧,哈哈


dfs+最小公倍數

每一個人只能且必須處于1個環中,自環也是環,如果環的元素個數是奇數則這個環必須是ansi =  k*cnt,如果是偶數則 ans = k * (cnt / 2);//這個是自己畫圖發現的規律。

這題不用多想甚么優化的方法,弄復雜了反而容易錯(比如筆者自己 T _ T ),n <= 100,直接對每個點每層dfs時cnt++,

直到找到 目標 find(u, v),,或找到根節點時,或 cnt > 100 時return。//這個100是自己設定的,即最多100個節點cnt大于100說明ans = ⑴。

比如

5
2 4 3 1 2

這組數據。

找出每一個環的ansi,然后對這些ansi取最大公約數便可,a、b最大公約數等于 a * b / (gcd(a, b)),且注意中間進程溢出,由于這里有 a * b了

復雜度 O(n^2)


#include <iostream>
#include <cstdio>
#include <cstring>
#include <queue>
using namespace std;
typedef long long LL;
const int maxn = 1e2 + 8;

int cnt;
bool flag[maxn];
queue<int> que;

int father[maxn], _rank[maxn];
inline void DisjointSet(int n)
{
    for(int i = 0; i <= n; i++){
        father[i] = i;
    }
}

inline bool _find(int v, int u)
{
    if(father[v] == u){
        //cout << cnt << endl;
        if(cnt % 2 == 1){
            que.push(cnt);
        }
        else{
            que.push(cnt / 2);
        }
        return true;
    }
    else if(father[v] == v){
        return false;
    }
    else{
        cnt++;
        if(cnt == 1024) return false;
        if(!_find(father[v], u)){
            return false;
        }
        else return true;
    }
}

inline LL gcd(LL a, LL b)
{
    return b == 0 ? a : gcd(b, a % b);
}
int main()
{
    #ifdef LOCAL
    freopen("c.txt", "r", stdin);
    //freopen("c.out", "w", stdout);
    int T = 4;
    while(T--){
    #endif // LOCAL
    ios::sync_with_stdio(false); cin.tie(0);

    int n;
    cin >> n;
    DisjointSet(n);
    for(int i = 1; i <= n; i++){
        cin >> father[i];
    }

    LL ans = 1;
    for(int i = 1; i <= n; i++){
        cnt = 1;
        if(!_find(i, i)){
            ans = 1024;
            break;
        }
    }
    if(ans != 1024){
        ans = que.front();
        que.pop();
        while(!que.empty()){
            ans = (ans * que.front()) / gcd(ans, que.front());
            //!WA 61 這里溢出了,換成LL 以后過了, 畢竟求的是最小公倍數
            que.pop();
        }
        cout << ans << endl;
    }
    else cout << ⑴ << endl;



    #ifdef LOCAL
    memset(flag, false, sizeof flag);
    cout << endl;
    }
    #endif // LOCAL
    return 0;
}



  Thank you!

                                                                                                                                               ------from ProLights

生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關閉
程序員人生
主站蜘蛛池模板: 国产精品久久久久久久久久久久久久 | 日韩免费精品视频 | 亚洲第一免费播放区 | 久久se精品一区精品二区 | 午夜激情福利视频 | 色淫网站 | 国外成人在线视频 | 成人国产精品久久久按摩 | 国产精品2区 | 精品九九久久 | 精品久久久免费 | 亚洲a级片 | 精品国产高清一区二区三区 | 国产欧美精品一区二区色综合朱莉 | 欧美精品导航 | 亚洲午夜免费视频 | 视频精品一区 | 国产乱码精品一区二区三区不卡 | 欧美日韩在线精品一区二区 | 免费在线黄色电影 | 日韩欧美国产精品 | 91色综合| 日本激情网 | 久久国产精品毛片 | 国产精品第85页 | 污网站在线播放 | 99精品国产高清在线观看 | 91国偷自产一区二区使用方法 | 污网站在线观看 | av网站观看| 成人av片在线观看 | 不卡欧美 | 最近中文字幕mv免费高清在线 | 亚洲在线中文字幕 | 久久免费观看少妇a级毛片 亚洲成人一区二区 | 日韩精品 电影一区 亚洲 | 欧美在线视频免费观看 | 亚洲网在线 | 久久免费精品 | 国产精品高清网站 | 欧美视频网 |