#38421: 記憶體爆掉了 要怎麼修改?


buanyz03 (張晁瑋)

學校 : 新北市立板橋高級中學
編號 : 2629
來源 : [114.25.190.198]
最後登入時間 :
2023-09-06 15:43:50
b691. 4. 棕櫚步道 -- 2014高雄市資訊學科能力競賽高中組 | From: [203.69.87.1] | 發表日期 : 2023-11-21 14:53

#include <iostream>
#include <algorithm>
using namespace std;
struct edge
{
  int d,s;
  int w,k;
};
bool gt(edge a,edge b)
{
    return a.w<b.w;
}

edge e[3000001];
int check[3000001];

int find(int x)
{
    if(x==check[x])
    {
        return x;
    }
    check[x]=find(check[x]);
    return check[x];
}
int main()
{
  int n,m,index1,index2,mst;
  long long sum;

  while(cin>>n>>m)
  {
      sum=0;
      mst=n;
      for(int i=0;i<m;++i)
      {
          cin>>e[i].s>>e[i].d>>e[i].w>>e[i].k;
          e[i].w-=e[i].k;
      }
      for(int i=0;i<=n;++i)
      {
          check[i]=i;
      }
      sort(e,e+m,gt);
      for(int i=0;i<m;++i)
      {
          index1=find(e[i].s);
          index2=find(e[i].d);
          if(index1!=index2)
          {
              check[index1]=index2;
              sum+=e[i].w;
          }
          else if(e[i].w<0)
          {
              sum+=e[i].w;
          }
      }
      cout<<sum<<endl;
  }
}

 
ZeroJudge Forum