mxqz,spfa TLE on #9
查看原帖
mxqz,spfa TLE on #9
358739
BFSDFS123楼主2022/2/10 20:23
#include<bits/stdc++.h>
#define inf 0x3f3f3f3f
//#define LL_inf 1145141919810
//#define int long long
#define ull unsigned long long
#define ll long long
using namespace std;
const int Maxn=210;
const int Maxm=20010;
int head[Maxn],tot;
struct Edge{
	int to,w;
	int nxt;
}E[Maxm<<1];
void addedge(int u,int v,int w)
{
	tot++;
	E[tot].to=v;
	E[tot].w=w;
	E[tot].nxt=head[u];
	head[u]=tot;
}
int dis[Maxn][Maxn];
int shortpath[Maxn][Maxn];
int k=-1;
void spfa(int s)
{
	memset(dis[s],0x3f,sizeof(dis[s]));
	dis[s][s]=0;
	queue<int> q;
	q.push(s);
	while(!q.empty())
	{
		int u=q.front();
		q.pop();
		for(int i=head[u];i;i=E[i].nxt)
		{
			int v=E[i].to;
			int w=E[i].w;
			if(v==k)
			{
				continue;
			}
			if(dis[s][u]+w<dis[s][v])
			{
				dis[s][v]=dis[s][u]+w;
				q.push(v);
			}
		}
	}
}
int n,m;
int main()
{
	scanf("%d%d",&n,&m);
	for(int i=1;i<=m;i++)
	{
		int u,v,w;
		scanf("%d%d%d",&u,&v,&w);
		addedge(u,v,w);
		addedge(v,u,w);
	}
	for(int i=1;i<=n;i++)
	{
		spfa(i);
		for(int j=1;j<=n;j++)
		{
			shortpath[i][j]=dis[i][j];
//			printf("%d %d,dis:%d\n",i,j,shortpath[i][j]);
		}
	}
	vector<int> ans;
	for(int i=1;i<=n;i++) //kill point
	{
		k=i;
		bool flag=false;
//		cout<<"i:"<<i<<endl;
		for(int j=1;j<=n;j++)
		{
			if(j==k) continue;
			spfa(j);
			for(int l=1;l<=n;l++)
			{
				if(l==k) continue;
//				cout<<j<<" "<<l<<",dis:"<<dis[j][l]<<endl;
				 
				if(shortpath[j][l]<dis[j][l])
				{
					ans.push_back(i);
					flag=true;
					break;
				}
			}
			if(flag) break;
		}
	}
	if(ans.size()==0)
	{
		puts("No important cities.");
		return 0;
	}
	sort(ans.begin(),ans.end());
	for(auto x:ans)
	{
		printf("%d ",x);
	}
	return 0;
}

2022/2/10 20:23
加载中...