莫名其妙的TLE/TE

/*宿命的PSS(www.vijos.org/p/1579)
从最小边搜起,
已搜过的两点间边权为w(w=已搜边权最大值+1),
结果即为答案. */
#include <iostream>
#include <algorithm>
using namespace std;
int n,i,j,k=1;
int ans=0;
bool vis[20050][20050];
struct jl//way
{
    int s,e,w;//start,end,weight
} arr[20050];
bool cmp(jl a,jl b)
{
    return a.w<b.w;
}
int bcj[20050];//'bing_cha_ji'
void ji()//memset'bing_cha_ji'
{
    for(int i=1;i<=n;i++)
    bcj[i]=i;
}
int cha(int i)
{
    if (bcj[i]==i) return i;
    return bcj[i]=cha(bcj[i]); 
}

void bing(int x,int y)
{
    bcj[cha(x)]=cha(y);
}
int main()
{
    cin>>n;
    ji();
    for(i=1;i<=n-1;i++)
    {
        int s,e,w;
        cin>>s>>e>>w;
        arr[k].s=s,arr[k].e=e,arr[k].w=w,k++;
    }
    k--;
    /*input&memset*/
    sort(arr+1,arr+1+k,cmp);
    /*sort the ways*/
    for(int i=1;i<=k;i++)
    {
        if(cha(arr[i].s)!=cha(arr[i].e))
        {
            ans+=arr[i].w;
            vis[arr[i].s][arr[i].e]=1;
            vis[arr[i].e][arr[i].s]=1;
            bing(arr[i].s,arr[i].e);
            for(int x=1;x<=n;x++)
                for(int y=1;y<=n;y++)
                if(vis[x][y]==0&&x!=y)
                {
                    if(cha(x)==cha(y))
                        vis[x][y]=vis[y][x]=1,ans+=arr[i].w+1;
                }
        }
    }
    /*main*/
    cout<<ans<<endl;
    /*output*/
}

0 条评论

目前还没有评论...

信息

ID
1579
难度
5
分类
树结构 | 生成树 点击显示
标签
(无)
递交数
1344
已通过
453
通过率
34%
被复制
2
上传者