1.可能需要规避不是连通图的情况。
2.注意行末的空格造成的格式错误。
其余可见其他博客,仅提供一种方法。
#include <cstdio>
#include <algorithm>
#include <cmath>
#include <cstring>
#include <queue>
#include <vector>
#include <map>
#include <string>
#include <stack>
#define lint long long
using namespace std;
vector<int>finaans;
struct node
{
int from;
int to;
int cost;
}nodetmp;
vector<node>maps[550];
int cntlen[550];
bool flglen[550];
int main()
{
int i,j,k,l,t,m,n;
scanf("%d",&n);
scanf("%d",&m);
for(i=0;i<m;i++)
{
scanf("%d",&j);
scanf("%d",&k);
scanf("%d",&l);
scanf("%d",&t);
if(t==1)
{
l=0;
}
nodetmp.from=j;
nodetmp.to=k;
nodetmp.cost=l;
maps[j].push_back(nodetmp);
nodetmp.from=k;
nodetmp.to=j;
nodetmp.cost=l;
maps[k].push_back(nodetmp);
}
int maxxanskey=0;
for(i=1;i<=n&&n>1;i++)
{
//dele point i case
memset(cntlen,0x3f,sizeof cntlen);
memset(flglen,0,sizeof flglen);
if(i==1)
cntlen[2]=0;
else
cntlen[1]=0;
int everypointnum=0;
for(j=1;j<=n-1;j++)
{
int minn=0x3f3f3f3f;
int key = 0;
for(k=1;k<=n;k++)
{
if(cntlen[k]<minn&&flglen[k]==0&&k!=i)
{
minn=cntlen[k];
key=k;
}
}
flglen[key]=1;
everypointnum+=minn;
if(everypointnum>=0x3f3f3f3f)
{
everypointnum=0x3f3f3f3f;
break;
}
for(k=0;k<maps[key].size();k++)
{
if(maps[key][k].to!=i)
cntlen[maps[key][k].to]=min(cntlen[maps[key][k].to],maps[key][k].cost);
}
}
if(everypointnum>maxxanskey)
{
maxxanskey = everypointnum;
finaans.clear();
finaans.push_back(i);
}
else
if(everypointnum==maxxanskey&&everypointnum>0)
{
finaans.push_back(i);
}
}
if(finaans.size()==0)
printf("%d",finaans.size());
else
for(i=0;i<finaans.size();i++)
{
if(i!=0) printf(" ");
printf("%d",finaans[i]);
}
return 0;
}