2016-07-11 7 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; 
} 

Immer noch vor Fehlern.
Ich versuche zu implementieren Prims Algorithmus.
Die Zeilennummern konnten nicht eingefügt werden, daher wurden die Fehler zusammen mit den Zeilen selbst angehängt.
Sorry, aber konnte nicht helfen, einschließlich der "abscheulichen Teil", weil der Fehler in diesem Teil ist.Stellt <pair <lang lang, lang lang>> unterstützt Mitglieder nicht zuerst eine Sekunde?

Antwort

0

Obwohl Sie einen globalen Satz haben s

set< pair<LL, LL> > s; 

Sie haben definiert, auch eine lokale Variable s vom Typ long long:

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

, das die globalen s versteckt. Offensichtlich hat ein long long weder begin noch erase Elementfunktionen, da es ein primitiver Typ ist. Daraus ergibt sich die Fehler:

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' 

Um auf den globalen s zu beziehen, verwenden ::s, das heißt

::s.erase(it); 

Und schließlich möchte ich darauf hinweisen, dass diese „contestese“ Codierstil Sie verwenden abscheulich ist. Fühlen Sie sich frei, es bei Wettbewerben so oft wie Sie möchten zu verwenden, aber bearbeiten Sie es bitte weg, wenn Sie Fragen zu SO stellen.

+0

Dank gewesen !! Wie konnte ich das verpasst haben, aber trotzdem einige Fehler übersehen, habe meinen Code aktualisiert – Kaustubh

0

Der Fehler in meinem Code gefunden.

wt=wt+*(it).ff; 

statt * (es) sollte (* it)

+1

Nur zur Info, wir haben einen speziellen 'Operator ->' in diesem Fall zu verwenden. I.e. 'it-> ff' statt' (* it) .ff' –

Verwandte Themen