zoukankan      html  css  js  c++  java
  • [arc079f] Namori Grundy 分类讨论

    Description

    给给全有一个NN个点NN条边的有向图,点的的编号从11到NN
    给给全的图有NN条边,形如:(p1,1),(p2,2),...,(pN,N)(p1,1),(p2,2),...,(pN,N),保证图是弱连通的。其中,(u,v)(u,v)表示一条从点uu到vv的单向边。“弱连通”是指:假如所有的边都是双向边,则图连通图
    给给全为每个点设置了一个权值,aiai表示点ii的权值。因为他很给给,所以他希望图满足如下性质:

    • 所有aiai都是非负整数
    • 对于每条边(i,j)(i,j),满足ai≠ajai≠aj
    • 对于所有i,x(0≤x≤ai)i,x(0≤x≤ai),存在一条边(i,j)(i,j)满足x=ajx=aj

    请你帮给给全判断一下,这样给给的图是否存在呢?

    Input

    第一行一个正整数NN

    第二行NN个正整数,第ii个数表示pipi

    Output

    如果存在这样的图,输出POSSIBLE,否则输出IMPOSSIBLE

    Sample Input

    Sample #1
    4
    2 3 4 1
    
    Sample #2
    3
    2 3 1
    
    Sample #3
    4
    2 3 1 1
    
    Sample #4
    6
    4 5 6 5 6 4
    

    Sample Output

    Sample #1
    POSSIBLE
    
    Sample #2
    IMPOSSIBLE
    
    Sample #3
    POSSIBLE
    
    Sample #4
    IMPOSSIBLE
    

    HINT

    样例一的一种可行点权分配是{ai}={0,1,0,1}{ai}={0,1,0,1}或{ai}={1,0,1,0}{ai}={1,0,1,0}

    样例三的一种可行点权分配是{ai}={2,0,1,0}{ai}={2,0,1,0}

    2≤N≤2000002≤N≤200000

    1≤pi≤Npi≠i1≤pi≤Npi≠i

    保证图是弱联通的

    本题采用subtask。分别存在:

    • 20%20%的数据满足n≤18n≤18;
    • 20%20%的数据随机;
    • 20%20%的数据中pipi互不相同。

    题面修正:

    • aiai非负;
    • 是0≤x<ai0≤x<ai;
    • 你需要设置的是aiai。

    Sol

    orzckw

    这题放f有点简单了吧?

    Code

    #include <bits/stdc++.h>
    using namespace std;
    int n,x=1,mx,mn,cnt,vis[200005],fa[200005],cir[200005],a[200005];vector<int> e[200005];
    int dfs(int x)
    {
        for(int i=0;i<e[x].size();i++) if(!cir[e[x][i]]) dfs(e[x][i]);
        for(int i=0;i<e[x].size();i++) if(!cir[e[x][i]]) vis[a[e[x][i]]]=1;
        for(a[x]=0;vis[a[x]];a[x]++);
        for(int i=0;i<e[x].size();i++) if(!cir[e[x][i]]) vis[a[e[x][i]]]=0;
        return 0;
    }
    int main()
    {
        scanf("%d",&n),mx=-1,mn=n+1,cnt=0;
        for(int i=1;i<=n;i++) scanf("%d",&fa[i]),e[fa[i]].push_back(i);
        while(!vis[x]) vis[x]=1,x=fa[x];
        memset(vis,0,sizeof(vis));while(!cir[x]) cir[x]=1,x=fa[x];
        for(int i=1;i<=n;i++) if(cir[i]) dfs(i),mx=max(a[i],mx),mn=min(a[i],mn),cnt++;
        (mx==mn&&cnt%2==1)?printf("IMPOSSIBLE
    "):printf("POSSIBLE
    ");
    }
    
  • 相关阅读:
    Shapelib库编译
    CheckedComboBoxEdit实现单选
    VS2019卡在创建Windows恢复点
    ArcGIS Add-In 创建自定义菜单
    使用DevExpress展示地图—加载SHP
    未能从程序集ESRI.ArcGIS.AddIns.SDK加载任务"ValidateAddInXMLTask"
    没有为该对象定义无参数的构造函数
    RichEditControl自定义高亮语法
    Java解析Word模版,替换${}的值
    64.QT-单播、广播、组播
  • 原文地址:https://www.cnblogs.com/CK6100LGEV2/p/9520909.html
Copyright © 2011-2022 走看看