记录编号 423547 评测结果 AAAAAAAAAA
题目名称 [NOI 2008]假面舞会 最终得分 100
用户昵称 GravatarCooook 是否通过 通过
代码语言 C++ 运行时间 0.035 s
提交时间 2017-07-12 08:22:01 内存使用 6.34 MiB
显示代码纯文本
#include <bits/stdc++.h>
#define MAXN 100005
#define MAXM 1000005
#define Max(x,y) (x)>(y)? (x):(y)
#define Min(x,y) (x)<(y)? (x):(y)
int first[MAXN],e=1,Gcd,maxn,minn,n,m,final_ans,f[MAXN];
bool vis[MAXN];


inline int read(){
    int x=0;
    char ch=getchar();
    for(;ch>'9'||ch<'0';ch=getchar());
    for(;ch>='0'&&ch<='9';ch=getchar())x=(x<<3)+(x<<1)+(ch^48);
    return x;
}

int gcd(int x,int y){
    return y==0?x:gcd(y,x%y);
}

struct edge{
    int u,v,next,w;
}a[MAXM<<1];

void push(int u,int v,int w){
    a[e].u=u;
    a[e].v=v;
    a[e].w=w;
    a[e].next=first[u];
    first[u]=e++;
}

void dfs(int u){
    vis[u]=1;
    maxn=Max(f[u],maxn);
    minn=Min(f[u],minn);
    for(int i=first[u];i;i=a[i].next){
        int v = a[i].v;
        if(!vis[v])
            f[v]=f[u]+a[i].w,dfs(v);
        else Gcd=gcd(Gcd,abs(f[u]-f[v]+a[i].w)),maxn=Max(f[v],maxn),minn=Min(f[v],minn);
    }
}

int lc(){
    freopen("party2008.in","r",stdin);

    FILE *fout;
    fout=fopen("party2008.out","wb");
    
    n=read();m=read();
    
    for(int i=1;i<=m;i++){
        int u=read(),v=read();
        push(u,v,1);push(v,u,-1);
    }
    
    for(int i=1;i<=n;i++)if(!vis[i]){
        minn=maxn=0;
        dfs(i);
        final_ans += maxn-minn+1;
    }
    
    if(!Gcd){
        if(final_ans<3){
            fprintf(fout,"-1 -1\n");
            return 0;
        }
        else fprintf(fout,"%d 3\n",final_ans);
        return 0;
    }
    
    else{
        int ans;
        for(ans=3;ans<Gcd&&Gcd%ans!=0;ans++);
        if(Gcd<3){
            fprintf(fout,"-1 -1\n");
            return 0;
        }
        fprintf(fout,"%d %d\n",Gcd,ans);
        return 0;
    }
    
    return 0;
}

int my_son=lc();

int main(){
}