Run ID 作者 问题 语言 测评结果 分数 时间 内存 代码长度 提交时间
24543 baka24 【BJ】T3 C++ 运行超时 91 2012 MS 1692 KB 1486 2024-01-02 15:54:06

Tests(73/80):


#include<bits/stdc++.h> using namespace std; #define int long long const int MAXN=20010,Mod=1011451423,Nod=1540285339,base=433; struct Edge{int v,nx;}edge[MAXN<<7];int h[MAXN],CNT;void init(){memset(h,-1,sizeof(h));CNT=0;} void add_side(int u,int v){edge[++CNT]={v,h[u]};h[u]=CNT;edge[++CNT]={u,h[v]};h[v]=CNT;} int n,m,a[MAXN],q[MAXN],tot,vs[MAXN],bsm[MAXN],bsn[MAXN]; bool ans; struct Loop{ int x,y; }p[MAXN]; void dfs(int now,int lst,int tp){ if(ans)return; if(vs[now]){ int x=0,y=0; for(int i=vs[now];i<tp;i++){ x+=bsm[q[i]]; x%=Mod; y+=bsn[q[i]]; y%=Nod; } int tmp=tp-vs[now]; if(!p[tmp].x&&!p[tmp].y){ p[tmp].x=x; p[tmp].y=y; } else{ if(p[tmp].x!=x||p[tmp].y!=y){ ans=1; return; } } return; } q[tp]=now;vs[now]=tp; for(int i=h[now];i!=-1;i=edge[i].nx){ if(edge[i].v!=lst)dfs(edge[i].v,now,tp+1); if(ans)return; } vs[now]=0; } signed main(){ init(); scanf("%lld%lld",&n,&m); bsn[1]=bsm[1]=base; for(int i=2;i<=n;i++)bsn[i]=bsn[i-1]*base%Nod,bsm[i]=bsm[i-1]*base%Mod; for(int i=1;i<=m;i++){ int u,v; scanf("%lld%lld",&u,&v); add_side(u,v); } for(int i=1;i<=n;i++)dfs(i,-1,1); printf("%s",(ans)?"Yes":"No"); return 0; }


测评信息: