思路:

假如有答案,一定是n的约数,因为假如有答案一定得是一个对称图形.然后我们对移动n的约数进行判断即可.

1.所连边数相同.
2.该点到所有点的距离是一样的.

然后本题就做完了.还是比较难想的叭..

代码:

#include <bits/stdc++.h>
using namespace std;
const int N=2e5+5;
vector<int>g[N];
int a[N],b[N],n,m;
int dis(int u,int v)
{
    if(v>u)    swap(v,u);
    return min(u-v,n-(u-v));
}

int main()
{
    cin>>n>>m;
    for(int i=1;i<=m;i++)
    {
        int u,v;cin>>u>>v;
        u--,v--;
        g[u].push_back(v);
        g[v].push_back(u);
    }bool flag=false;
    for(int i=1;i<n;i++)
    {
        if(flag)    break;
        if(n%i!=0)    continue;
        bool fl=true;
        for(int j=0;j<n;j++)
        {
            int u=j,v=(j+i)%n;
            if(g[u].size()!=g[v].size())    
            {
                fl=false;break;    
            }
            int num=g[u].size();
            for(int k=0;k<num;k++)
            {
                a[k]=dis(u,g[u][k]);
                b[k]=dis(v,g[v][k]);
            }sort(a,a+num);sort(b,b+num);
            for(int k=0;k<num;k++)
                if(a[k]!=b[k])    fl=false;    
        }if(fl)    flag=true;
    }
    if(flag)    puts("Yes");
    else        puts("No");
    return 0;
}