相同代码,为什么c++14和c++98效率完全不一
  • 板块灌水区
  • 楼主filletoto
  • 当前回复12
  • 已保存回复12
  • 发布时间2024/10/6 09:27
  • 上次更新2024/10/6 10:47:56
查看原帖
相同代码,为什么c++14和c++98效率完全不一
400410
filletoto楼主2024/10/6 09:27

RT。求大佬分析一下。

代码:

//第一次:70pts TLE
//第二次:100pts AC
//c++14换成c++98就好了
#include <bits/stdc++.h>
using namespace std;
inline int read()
{
	char ch=getchar();
	int x=0,f=1;
	while((ch<'0'||ch>'9')&&ch!='-') 
	{
		ch=getchar();
	}
	if(ch=='-') f=-1;
	while(ch>='0'&&ch<='9')
	{
		x=x*10+ch-48;
		ch=getchar();
	}
	return x*f;
}
struct node
{
	int x,y;
};
int edge[2005][2005];
vector<node> v;
queue<int> q;
int vis[2005],x,y,z,sum,n,m,k,h,Q,ans,d[2005],player[2005];
int is_f[2005][2005];
inline bool cmp(node a,node b)
{
	return edge[a.x][a.y]<edge[b.x][b.y];
}
inline bool check()
{
	for(int i=1;i<=n;i++)
	{
		vis[i]=0;
	}
	while(!q.empty()) q.pop();
	q.push(k);
	while(!q.empty())
	{
		int x=q.front();
		q.pop();
		for(int i=1;i<=n;i++)
		{
			if(edge[x][i]!=0&&vis[i]==0&&is_f[x][i]==0)
			{
				if(player[i]==1)
				{
					return false;
				}
				q.push(i);
				vis[i]=1;
			}	
		}
	}
	return true;
}
inline void dfs(int x)
{
	if(check())
	{
		ans=sum;
		return ;
	}
	if(x>=v.size())
	{
		return ;
	}
	sum+=edge[v[x].x][v[x].y];
	is_f[v[x].x][v[x].y]=1;
	is_f[v[x].y][v[x].x]=1;
	if(ans>sum)
	{
		dfs(x+1);
	}
	sum-=edge[v[x].x][v[x].y];
	is_f[v[x].x][v[x].y]=0;
	is_f[v[x].y][v[x].x]=0;
	dfs(x+1);
}
int main()
{
	ios::sync_with_stdio(false);
	n=read();
	m=read();
	k=read();
	for(int i=1;i<=m;i++)
	{	
		x=read();
		y=read();
		z=read();
		v.push_back((node){x,y});
		edge[x][y]=edge[y][x]=z;
	}
	Q=read();
	while(Q--)
	{
		int x;
		x=read();
		player[x]=1;
	}
	sort(v.begin(),v.end(),cmp);
	for(int i=1;i<=n;i++)
	{
		if(edge[k][i]!=0) ans+=edge[k][i];
	}
	dfs(0);
	printf("%d\n",ans);
	

	return 0;
}
2024/10/6 09:27
加载中...