#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;
}
仍面临错误。
我正在尝试实施 Prim的算法
无法包含行号,因此将错误与行本身一起附加
对不起,但无法帮助包括&#34;令人憎恶的部分&#34;因为错误在那部分。
编辑: 发现我的错误,这是一个语法错误。
答案 0 :(得分:0)
虽然您有一个全局集s
set< pair<LL, LL> > s;
您还定义了long long类型的局部变量s
:
LL n,m,x,i,j,k,wt=0,s;
隐藏全局s
。显然,long long
既没有begin
也没有erase
成员函数,因为它是原始类型。因此错误:
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);
最后我要指出这个&#34; contestese&#34;你正在使用的编码风格令人憎恶。您可以随意在竞赛期间使用它,但是当您在SO上发布问题时请将其编辑。
答案 1 :(得分:0)
在我的代码中发现了错误。
wt=wt+*(it).ff;
而不是*(它)应该是(* it)