Online JudgeProblem SetAuthorsOnline ContestsUser
Web Board
Home Page
F.A.Qs
Statistical Charts
Problems
Submit Problem
Online Status
Prob.ID:
Register
Update your info
Authors ranklist
Current Contest
Past Contests
Scheduled Contests
Award Contest
User ID:
Password:
  Register

1A 哈希+bellman ford

Posted by kinghold at 2014-04-19 15:04:44 on Problem 2240
#include <algorithm>
#include <iostream>
#include <sstream>
#include <cstdlib>
#include <cstring>
#include <cstdio>
#include <string>
#include <bitset>
#include <vector>
#include <queue>
#include <stack>
#include <cmath>
#include <list>
#include <map>
#include <set>
using namespace std;
/***************************************/
#define ll long long
#define int64 __int64
/***************************************/
const int INF = 0x7f7f7f7f;
const double eps = 1e-8;
const double PIE=acos(-1.0);
const int dx[]= {0,-1,0,1};
const int dy[]= {1,0,-1,0};
const int fx[]= {-1,-1,-1,0,0,1,1,1};
const int fy[]= {-1,0,1,-1,1,-1,0,1};
/***************************************/
void openfile()
{
    freopen("data.in","rb",stdin);
    freopen("data.out","wb",stdout);
}
/**********************华丽丽的分割线,以上为模板部分*****************/
const int MAX=-1;
#define N 1000
int t,edgenum;
double w;
typedef struct Edge
{
    int u,v;
    double cost;
};
Edge edge[N];
double dis[N];
bool Bellman_ford()
{
    int i,j;
    for(i=1;i<=t;i++)
        dis[i]=MAX;
    dis[1]=1;
    for(i=1;i<=t-1;i++)
       for(j=1;j<=edgenum;j++)
           if (dis[edge[j].v]<dis[edge[j].u]*edge[j].cost)
                dis[edge[j].v]=dis[edge[j].u]*edge[j].cost;
    int flag=0;
    for(i=1;i<=edgenum;i++)
        if (dis[edge[i].v]<dis[edge[i].u]*edge[i].cost)
        {
            flag=1;
            break;
        }
    return flag;
}
int main()
{
    int cas=0;
    while(scanf("%d",&t)&&t)
    {
        map<string,int>mp;
        char a[50],b[50];
        int i,j;
        int num=0;
        for(i=0;i<t;i++)
            scanf("%s",a);
        scanf("%d",&edgenum);
        for(i=1;i<=edgenum;i++)
        {
            scanf("%s %lf %s",a,&w,b);
            if (mp[a]==0)
                mp[a]=++num;
            if (mp[b]==0)
                mp[b]=++num;
            edge[i].u=mp[a];
            edge[i].v=mp[b];
            edge[i].cost=w;
        }
        if (Bellman_ford())
            printf("Case %d: Yes\n",++cas);
        else
            printf("Case %d: No\n",++cas);
    }
    return 0;
}

Followed by:

Post your reply here:
User ID:
Password:
Title:

Content:

Home Page   Go Back  To top


All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator