深搜RE了
  • 板块P1931 套利
  • 楼主aliah
  • 当前回复0
  • 已保存回复0
  • 发布时间2025/1/16 12:32
  • 上次更新2025/1/16 15:57:22
查看原帖
深搜RE了
1095195
aliah楼主2025/1/16 12:32

样例过了,用深搜做的,主要是看这数据量觉得深搜应该问题不大,但就是不知道为啥会RE

#include<bits/stdc++.h>
#include<map>
using namespace std;
struct st
{
	int from,to,next;
	double w;
}e[100000];
int h[301],cnt;
double w[301];
void add(int u,int v,double w)
{
	e[cnt].from=u;
	e[cnt].to=v;
	e[cnt].w=w;
	e[cnt].next=h[u];
	h[u]=cnt;
	cnt++;
}
void dfs(int k,int b)
{
	int i;
	if(k==b && w[k]>1)
		return; //确定能套利,会一直循环下载重复套的 
	for(i=h[k];i;i=e[i].next)
		if(w[e[i].to]<w[e[i].from]*e[i].w)
		{
			w[e[i].to]=w[e[i].from]*e[i].w;
			dfs(e[i].to,b);
		 } 
}
int main()
{
	int k;
	for(k=1;;k++) 
	{
		int n,i,j;
		double x;
		bool ans=false;
		string s,t;
		cin>>n;
		if(n==0)
			break;
		map<string,int>a;
		for(i=1;i<=n;i++)
		{
			cin>>s;
			a[s]=i;
			h[i]=0;
		}
		cnt=1;
		cin>>n;
		for(i=0;i<n;i++)
		{
			cin>>s>>x>>t;
			add(a[s],a[t],x);
		}
		for(i=1;i<=n;i++)
		{
			for(j=0;j<=30;j++)
				w[j]=0;
			w[i]=1;
			dfs(i,i);
			if(w[i]>1)
			{
				ans=true;
				break;
			}
		}
		if(ans)
			cout<<"Case "<<k<<": Yes\n";
		else
			cout<<"Case "<<k<<": No\n";
		a.clear();
	}
	return 0;
}
2025/1/16 12:32
加载中...