栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

zoj 1455 Schedule Problem

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

zoj 1455 Schedule Problem

#include <iostream>#include <map>#include <algorithm>#include <queue>#include <math.h>#include <stdio.h>#include <string.h>#include <vector>using namespace std;#define MOD 1000000007#define maxn 21010#define maxm 1010struct node{  int to;  int next;  int val;}E[maxn];int num;int in[maxm];int V[maxm];int T[maxm];int d[maxm],cnt[maxm];bool f[maxm];bool sfpa(int s,int n){    queue <int> Q;   int u,v;   int e;   Q.push(s);   d[s]=0;   f[s]=true;   while(!Q.empty()){    u=Q.front(); Q.pop();    cnt[u]++;     if(cnt[u]>n) return false;    f[u]=false;    for(e=V[u];e!=-1;e=E[e].next){        v=E[e].to;        if(d[u]+E[e].val<d[v]){ d[v]=d[u]+E[e].val; if(!f[v]) {     f[v]=true;     Q.push(v); }        }    }   }   return true;}void add(char *str,int a,int b){    if(strcmp(str,"FAS")==0){        E[num].to=b;        E[num].val=T[a];        E[num].next=V[a];        V[a]=num++;    }else if(strcmp(str,"FAF")==0){        E[num].to=b;        E[num].val=T[a]-T[b];        E[num].next=V[a];        V[a]=num++;    }else if(strcmp(str,"SAF")==0){        E[num].to=b;        E[num].val=-T[b];        E[num].next=V[a];        V[a]=num++;    }else {        E[num].to=b;        E[num].val=0;        E[num].next=V[a];        V[a]=num++;    }}int main(){    int i,j,k;    int n;    char str[20];    int Case=1;   while(scanf("%d",&n),n){     for(i=1;i<=n;i++)        { scanf("%d",&T[i]); V[i]=-1; d[i]=MOD; cnt[i]=0; f[i]=false; in[i]=0;        }        i=0;        V[i]=-1;        d[i]=MOD;        cnt[i]=0;        f[i]=false;        num=0;       while(scanf("%s",str)){         if(strcmp(str,"#")==0) break;         else { scanf("%d %d",&i,&j); in[j]=1; add(str,i,j);         }       }     for(i=1;i<=n;i++){ E[num].to=i; E[num].val=-T[i]; E[num].next=V[0]; V[0]=num++;     }         int Min=MOD;         printf("Case %d:n",Case++);         if(!sfpa(0,n+1)) printf("impossiblen");         else{ for(i=1;i<=n;i++)     Min=min(Min,d[i]); for(i=1;i<=n;i++)     printf("%d %dn",i,d[i]-Min);         }         printf("n");   }}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/378753.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号