• POJ 2240Arbitrage


    题意:给一系列的货币,并给出其转化比率,问你是否存在一种转换关系使自己获得利息;从题意来说很简单一个判正环的,因为只要出现正环,就一定存在获得利息,所以spfa判正环即可;对于输入的字符串可以采用map用编号替换掉

    #include<algorithm>
    #include<iostream>
    #include<queue>
    #include<stack>
    #include<vector>
    #include<map>
    #include<set>
    #include<string>
    #include<cstring>
    #include<cstdio>
    using namespace std;
    int first[10005];int next[10005];
    typedef struct node{
    	int x;
    	int y;
    	double e;
    }node;
    node  vulue[10005];
    double dis[105];
    bool vis[105];int ci[105];
    int main(){
    	int m;
    	string a;
    	map<string,int>ma;
    	int r=0;
    	while(scanf("%d
    ",&m) && m){
    		r++;
    		for(int i=1;i<=m;i++){
    			cin>>a;
    			ma.insert(make_pair(a,i));
    		}
    		memset(first,-1,sizeof(first));
    		int n;
    		cin>>n;
    		map<string,int>::iterator it;
    		map<string,int>::iterator ip;
    		string c,d;
    		double e;
    		for(int i=1;i<=n;i++){
    			cin>>c>>e>>d;
    			it=ma.find(c);
    			ip=ma.find(d);
    			vulue[i].x=(*it).second;vulue[i].y=(*ip).second;vulue[i].e=e;
    			next[i]=first[vulue[i].x];
    			first[vulue[i].x]=i;
    		}
    		memset(dis,0,sizeof(dis));
    		memset(vis,0,sizeof(vis));
    		memset(ci,0,sizeof(ci));
    		dis[1]=1;
    		queue<int>que;
    		que.push(1);
    		vis[1]=1;
    		ci[1]++;
    		int flag=0;
    		while(!que.empty()){
    			int u=que.front();
    			que.pop();
    			vis[u]=0;
    			for(int j=first[u];j!=-1;j=next[j]){
    			//	cout<<vulue[j].y<<endl;
    				if(dis[vulue[j].y]<dis[u]*vulue[j].e){
    					dis[vulue[j].y]=dis[u]*vulue[j].e;
    				//	cout<<dis[vulue[j].y]<<endl;
    					if(vis[vulue[j].y]==0){
    						vis[vulue[j].y]=1;
    						ci[vulue[j].y]++;
    						que.push(vulue[j].y);
    						if(ci[vulue[j].y]>m){
    							flag=1;
    							break;
    						}
    					}
    				}
    			}
    			if(flag==1){
    				break;
    			}
    		}
    		cout<<"Case "<<r<<": ";
    		if(flag==1)  cout<<"Yes"<<endl;
    		else cout<<"No"<<endl;
    		ma.clear();
    	}
    	return 0;
    }


  • 相关阅读:
    MYSQL: MYSQLBINLOG命令查看日志文件
    JAVA MAIL 发送邮件(SSL加密方式,TSL加密方式)
    Spring和Email整合详解
    java 版百度网盘功能
    Spring @Conditional注解 详细讲解及示例
    spring注解之@Import注解的三种使用方式(转载)
    Redis protected-mode属性解读
    5
    4
    3
  • 原文地址:https://www.cnblogs.com/wang9897/p/7624392.html
Copyright © 2020-2023  润新知