求解为何TLE一个点

P2731 [USACO3.3] 骑马修栅栏 Riding the Fences

wwvwwei @ 2017-03-17 17:47:16

#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
struct edge
{
    int u;
    int v;
}e[2000];
bool vis[5000];
int dis[5000];
vector<int>p[501];
int a[501];
int n,m,fi;
int than;
bool cmp(int x,int y)
{
    int p,q;
    if(e[x].u==than)
    {
        p=e[x].v;
    }
    else p=e[x].u;
    if(e[y].u==than)
    {
        q=e[y].v;
    }
    else q=e[y].u;
    return p<q;
}
void dfs(int x,int k)
{
    int i;
    dis[k]=x;
    if(k==m)
    {
        fi=1;
        return;
    }
    for(i=0;i<p[x].size();i++)
    {
        if(!vis[p[x][i]])
        {
            vis[p[x][i]]=true;
            if(x==e[p[x][i]].u)
            {
                dfs(e[p[x][i]].v,k+1);
            }
            else
            {
                dfs(e[p[x][i]].u,k+1);
            }
            vis[p[x][i]]=false;
            if(fi==1) return;
        } 
    }
}
int main()
{
    int i,j,t=0;
    cin>>m;
    for(i=1;i<=m;i++)
    {
        cin>>e[i].u>>e[i].v;    
        a[e[i].u]++;
        a[e[i].v]++;
        p[e[i].u].push_back(i);
        p[e[i].v].push_back(i);
    }
    for(i=1;i<=500;i++)
    {
        than=i;
        sort(p[i].begin(),p[i].end(),cmp);
    }
    for(i=1;i<=500;i++)
    {
        if(a[i]%2==1)
        {
            t=1;
            dfs(i,0);
            for(j=0;j<m+1;j++)
            {
                cout<<dis[j]<<endl;
            }
            break;
        }
    }
    if(t==0)
    {
        dfs(1,0);
        i=1;
        for(j=0;j<m+1;j++)
        {
            cout<<dis[j]<<endl;
        }
    }
    return 0;
}

/*5 1 2 2 3 3 4 4 1 4 2*/


by 飞奔的蜗牛 @ 2017-04-27 21:07:27

人品原因,呵呵呵呵


by 飞奔的蜗牛 @ 2017-04-27 21:07:53

kkk,我错了,下次再也不敢了!


|