2016-07-11 8 views
0
#include <bits/stdc++.h> 
using namespace std; 

#define fast ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0); 
#define LL long long int 
#define pb push_back 
#define mp make_pair 
#define PII pair<int,int> 
#define PLL pair<LL,LL> 
#define PIS pair< int,string> 


#define test int t;cin>>t;while(t--) 
#define ff first // error: 'std::set<std::pair<long long int, long long int> >::iterator' has no member named 'first' 
#define ss second // error: 'std::set<std::pair<long long int, long long int> >::iterator' has no member named 'second' 
#define INF 1000000000 
#define input(a,n) for(i=1;i<=n;i++)cin>>a[i]; 
#define output(a,n) for(i=1;i<=n;i++)cout<<a[i]<<" "; 
vector< vector<LL> > v(3002, vector<LL>(3002,-1)); 
set< pair<LL, LL> > se; 
set< pair<LL, LL> >::iterator it; 
int vis[3002]={0}; 
void exmin(LL a) 
{ 
    LL x,des,val,min=INF; 
    for(x=0;x<v[a].size();x++) 
    { 
     if(v[a][x]<min) 
     { 
      val=v[a][x]; 
      des=x; 
      min=val; 
     } 
    } 
    se.insert(mp(val,des)); 
} 


int main() { 

    fast 
    LL n,m,x,i,j,k,wt=0,s; 
    cin>>n>>m; 
    vector<int> ve; 
    for(x=1;x<=n;x++) 
    ve.pb(x); 
    for(x=0;x<m;x++) 
    { 
    cin>>i>>j>>k; 
    if(v[i][j]!=-1) 
    { 
     if(v[i][j]>k) 
     { 
      v[i][j]=k; 
      v[j][i]=k; 
      } 
     } 
     else 
     { 
     v[i][j]=k; 
     v[j][i]=k; 
     } 

    } 
    cin>>s; 
    ve.erase(ve.begin()+s-1); 
    while(ve.size()!=0) 
    { 
    for(x=0;x<v[s].size();x++) 
    { 
     if(v[s][x]!=-1 && vis[x]!=1) 
     { 
      exmin(x); 
      } 
    } 
/* for(x=0;x<p.size();x++) 
    { 

    }*/ 

    it=se.begin(); 
    wt=wt+*(it).ff; 
    s=*(it).ss; 
    vis[*(it).ss]=1; 
    ve.erase(ve.begin()+*(it).ss-1); 

    se.erase(it); 
    } 

return 0; 
} 

エラーに直面しています。
プリムのアルゴリズムを実装しようとしています。
行番号を含めることができなかったため、行自体にエラーが付いていました。
申し訳ありませんが、その部分にエラーがあるため「忌憚のない部分」を含めてお手伝いできませんでした。あなたはグローバルセットs<pair <long long、long long>>は最初にメンバーをサポートしていませんか?

set< pair<LL, LL> > s; 

を持っていますが

答えて

0

はまた、long long型のローカル変数sを定義しています

LL n,m,x,i,j,k,wt=0,s; 

グローバルsを隠しています。明らかに、long longはプリミティブ型なので、begineraseのメンバー関数はありません。したがって、エラー:

it=s.begin(); //error: request for member 'begin' in 's', which is of non-class type 'long long int' 

s.erase(it); //error: request for member 'erase' in 's', which is of non-class type 'long long int' 

すなわち

::sを使用し、グローバル sを参照するために
::s.erase(it); 

とは、最後に私はあなたが使用しているこの「contestese」コーディングスタイルは忌まわしいであることを指摘したいと思います。あなたが好きなだけコンテストに参加しても構いませんが、あなたが質問を投稿した時点で編集してください。

+0

感謝をされている必要があります!どのように私はそれを逃したことができますが、まだいくつかのエラーに直面して、私のコードを更新しました – Kaustubh

0

私のコードでエラーが見つかりました。

wt=wt+*(it).ff; 

の代わりに、*(それは)それは(*それ)

+1

この場合、特別な 'operator - >'があります。私。 '(* it).ff'ではなく' it-> ff'です。 –

関連する問題