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

poj 1203 Timetable

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

poj 1203 Timetable

# include <stdio.h># include <set># include <vector># include <string.h># include <iostream># include <algorithm>using namespace std; struct node {     char s[10],e[10];    int nxt; }; int n,m; vector<node> data[100001]; vector<int> l[100001]; int s[100001]; int g[1000005],nxt[2000005],v[2000005],co=0,dp[1000005]; int change(char *ori) {     char tmp[10];    strcpy(tmp,ori);     return atoi(strtok(tmp,":"))*60+atoi(strtok(NULL,":")); } void addedge(int s,int e) {     v[co]=e;     nxt[co]=g[s];     g[s]=co++; } int solve(int pos) {     if(dp[pos]!=-1) return dp[pos];     else if(g[pos]==-1&&pos>=s[n-1]) return dp[pos]=l[n][pos-s[n-1]];    else    {       dp[pos]=(pos>=s[n-1]?l[n][pos-s[n-1]]:0xfffffff);         for(int p=g[pos];p!=-1;p=nxt[p])  dp[pos]=min(dp[pos],solve(v[p]));        return dp[pos];     } } void print(int time) {     printf("%s%d:%s%d",time/60<10?"0":"",time/60,time%60<10?"0":"",time%60); } int main() {     scanf("%d",&n);     s[0]=0;     for(int i=1;i<=n;i++)     {         scanf("%d",&m);         while(m--)         {  node tmp;  scanf("%s%s%d",tmp.s,tmp.e,&tmp.nxt);  data[i].push_back(tmp);  l[i].push_back(change(tmp.s));  if(tmp.nxt==n) l[n].push_back(change(tmp.e));         }         sort(l[i].begin(),l[i].end());         vector<int>::iterator end=unique(l[i].begin(),l[i].end());         while(l[i].end()!=end) l[i].pop_back();         s[i]=s[i-1]+l[i].size();     }     memset(g,-1,sizeof(g));     memset(dp,-1,sizeof(dp));     co=0;     for(int i=1;i<=n;i++)     {        for(int j=s[i-1];j<s[i]-1;j++)   addedge(j,j+1);         for(int j=0;j<data[i].size();j++)  if(lower_bound(l[data[i][j].nxt].begin(),l[data[i][j].nxt].end(),change(data[i][j].e))!=l[data[i][j].nxt].end())      addedge(s[i-1]+lower_bound(l[i].begin(),l[i].end(),change(data[i][j].s))-l[i].begin(),s[data[i][j].nxt-1]+lower_bound(l[data[i][j].nxt].begin(),l[data[i][j].nxt].end(),change(data[i][j].e))-l[data[i][j].nxt].begin());     }     vector<pair<int,int> >ans;    for(int i=s[1]-1;i>=0;i--)        if(solve(i)!=0xfffffff&&(ans.empty()||solve(i)<ans.back().second)) ans.push_back(make_pair(l[1][i],solve(i)));    printf("%dn",ans.size());    for(int i=ans.size()-1;i>=0;i--)    {        print(ans[i].first);        printf(" ");        print(ans[i].second);        printf("n");    }    return 0;}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/369345.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

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

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