求助!
查看原帖
求助!
152493
hjmhjmhjm楼主2021/2/5 13:58

各位大佬帮忙看看暴力剪枝哪错了

#include <iostream>
#include <vector>
#include <set>
using namespace std;
const int M=200009;
const long long N=1000000000000000009;
int n,m,k;
vector<int> vec[M];
int ls[M];
int yingshe[M];
set<int> gp[M];
long long circle;
long long lef;
int w[M];
int main()
{
    cin>>n>>m>>k;
    circle=k/m;
    lef=k%m;
    for(int i=1;i<=n;i++)
    {
        ls[i]=i;
        gp[i].insert(i);
    }
    for(int i=1;i<=m;i++)
    {
        int tmp1,tmp2;
        cin>>tmp1>>tmp2;
        vec[i].push_back(tmp1);
        vec[i].push_back(tmp2);
    }

    set<int>::iterator it;

    if(k>=m)
    {
        for(int i=1;i<=m;i++)
        {
            gp[ls[vec[i][0]]].insert(vec[i][1]);
            gp[ls[vec[i][1]]].insert(vec[i][0]);
            swap(ls[vec[i][0]],ls[vec[i][1]]);
        }
        for(int i=1;i<=n;i++)
            yingshe[i]=ls[i];

        if(circle>=2)
        {
            for(int i=1;i<=circle-1;i++)
            {
                w[i]=1;
                for(int j=1;j<=m;j++)
                {
                    int tmp=gp[j].size();
                    gp[j].insert(gp[yingshe[j]].begin(),gp[yingshe[j]].end());
                    int tmp2=gp[j].size();
                    if(tmp!=tmp2)
                        for(int k=j;k<=circle+j;k++)
                            w[k]=0;
                }
                if(w[i]=1)
                {
                    break;
                }
            }
        }
    }
    for(int i=1;i<=lef;i++)
    {
        gp[ls[vec[i][0]]].insert(vec[i][1]);
        gp[ls[vec[i][1]]].insert(vec[i][0]);
        swap(ls[vec[i][0]],ls[vec[i][1]]);
    }
    for(int i=1;i<=n;i++)
    {
        cout<<gp[i].size()<<endl;
    }
}

2021/2/5 13:58
加载中...