POJ 2240 && ZOJ 1082 Arbitrage 最短路,c++ stl pass g++ tle 难度:0
http://poj.org/problem?id=2240
用log化乘法为加法找正圈
c++ 110ms,g++tle
#include <string>
#include <map>
#include <iostream>
#include <cmath>
#include <cstring>
#include <queue>
using namespace std;
const int maxn = 50;
bool vis[maxn];
double chg[maxn][maxn];
double dis[maxn];
int e[maxn][maxn],deg[maxn];
map<string,int> idmp;
int n,m;
const double inf = 0x3fffffff; queue<int> que;
bool hasloop(int s){
while(!que.empty())que.pop();
que.push(s);
vis[s] = true;
int cnt = 0;
while(!que.empty()){
cnt ++;
s = que.front();que.pop();vis[s] = false;
for(int i = 0;i < deg[s];i++)
{
int t = e[s][i];
if(dis[t] < dis[s] + chg[s][t])
{
dis[t] = dis[s] + chg[s][t];
que.push(t);
vis[t] = true;
}
}
if(cnt > n * n)return true;
}
return false;
} int main(){
int ti = 0;
while(cin>>n && n && ++ti){
idmp.clear();
for(int i = 0;i < n;i++)
{
dis[i] = -inf;
for(int j = 0;j < n;j++)chg[i][j] = -inf;
}
memset(vis,false,sizeof vis);
memset(deg,0,sizeof deg); for(int i = 0;i < n;i++)
{
string tmp;
cin>>tmp;
idmp[tmp] = i;
}
cin>>m;
for(int i = 0;i < m;i++)
{
string sf,st;
double change;
cin>>sf>>change>>st;
change = log(change);
int f = idmp[sf];
int t = idmp[st];
chg[f][t] = change;
e[f][deg[f]++] = t;
}
bool fl = false;
for(int i = 0;i < n;i++)
{
if(dis[i] == -inf){
dis[i] = 1;
if(hasloop(i)){
fl = true;
break;
}
}
}
cout << "Case " << ti << ": ";
if(fl)cout << "Yes" <<endl;
else cout << "No" << endl;
}
return 0;
}
POJ 2240 && ZOJ 1082 Arbitrage 最短路,c++ stl pass g++ tle 难度:0的更多相关文章
- 最短路(Floyd_Warshall) POJ 2240 Arbitrage
题目传送门 /* 最短路:Floyd模板题 只要把+改为*就ok了,热闹后判断d[i][i]是否大于1 文件输入的ONLINE_JUDGE少写了个_,WA了N遍:) */ #include <c ...
- POJ 2240 Arbitrage / ZOJ 1092 Arbitrage / HDU 1217 Arbitrage / SPOJ Arbitrage(图论,环)
POJ 2240 Arbitrage / ZOJ 1092 Arbitrage / HDU 1217 Arbitrage / SPOJ Arbitrage(图论,环) Description Arbi ...
- poj 2240 Arbitrage 题解
Arbitrage Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 21300 Accepted: 9079 Descri ...
- poj 2240 Arbitrage (Floyd)
链接:poj 2240 题意:首先给出N中货币,然后给出了这N种货币之间的兑换的兑换率. 如 USDollar 0.5 BritishPound 表示 :1 USDollar兑换成0.5 Britis ...
- poj 2449(A*求第K短路)
题目链接:http://poj.org/problem?id=2449 思路:我们可以定义g[x]为源点到当前点的距离,h[x]为当前点到目标节点的最短距离,显然有h[x]<=h*[x](h*[ ...
- POJ 1562 && ZOJ 1709 Oil Deposits(简单DFS)
题目链接 题意 : 问一个m×n的矩形中,有多少个pocket,如果两块油田相连(上下左右或者对角连着也算),就算一个pocket . 思路 : 写好8个方向搜就可以了,每次找的时候可以先把那个点直接 ...
- POJ 3076 / ZOJ 3122 Sudoku(DLX)
Description A Sudoku grid is a 16x16 grid of cells grouped in sixteen 4x4 squares, where some cells ...
- poj 3100 (zoj 2818)||ZOJ 2829 ||ZOJ 1938 (poj 2249)
水题三题: 1.给你B和N,求个整数A使得A^n最接近B 2. 输出第N个能被3或者5整除的数 3.给你整数n和k,让你求组合数c(n,k) 1.poj 3100 (zoj 2818) Root of ...
- POJ - 1062 昂贵的聘礼(最短路Dijkstra)
昂贵的聘礼 Time Limit: 1000MS Memory Limit: 10000KB 64bit IO Format: %I64d & %I64u SubmitStatus Descr ...
随机推荐
- Switch用法
package com.cz.test; public class SwitchExample1 { /** * @param args */ public static void main(Stri ...
- 没办法,还是要补一下js,回调函数(转载)
<html> <head> <title>回调函数(callback)</title> <script language="javasc ...
- nodejs学习笔记<四>处理请求参数
在web开发中处理请求参数是个非常常见的工作:nodejs提供了了querystring用来处理请求参数. querystring常用方法有:parse,stringify. (1)parse: 解析 ...
- Linux设备模型(总线、设备、驱动程序和类)
Linux设备驱动程序学习(13) -Linux设备模型(总线.设备.驱动程序和类)[转] 文章的例子和实验使用<LDD3>所配的lddbus模块(稍作修改). 提示:在学习这部分内容是一 ...
- mysql 变量
用户变量 1.用户变量,用户变量和数据库连接有关,连接后声明变量,连接断开后,自动消失. 2.用户变量以@开头,select一个没有赋值的用户变量,返回NULL,也就是没有值,注意取值为NULL与取值 ...
- Java中List Set Map 是否有序等总结
1.Collection List Set Map 区别记忆 这些都代表了Java中的集合,这里主要从其元素是否有序,是否可重复来进行区别记忆,以便恰当地使用,当然还存在同步方面的差异,见上一篇相关文 ...
- C++——类和动态内存分配
一.动态内存和类 1.静态类成员 (1)静态类成员的特点 无论创建多少对象,程序都只创建一个静态类变量副本.也就是说,类的所有对象都共享同一个静态成员. (2)初始化静态成员变量 1)不能在类声明中初 ...
- 转:桥接模式(Bridge)
转自:http://www.cnblogs.com/rush/archive/2011/06/29/2093743.html 分析十分透彻明了 可以再结合另外一篇文章中的示例理解(http://b ...
- hiho_100_八数码
题目大意 8数码问题,在3x3的矩阵中填入0-8九个数字,0可以和它相邻的数字进行交换.从初始状态到达状态F(3x3的方格从上到下,从左到右,形成的数字串为123456780)所需要最少移动的次数. ...
- ListView 搭配SimpleAdapter
这是SimplerAdapter的构造函数 public SimpleAdapter(Context context, List<? extends Map<String, ?>&g ...