湫湫系列故事——过年回家

Time Limit: 500/200 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others)
Total Submission(s): 1362    Accepted Submission(s): 320

Problem Description
  出门在外,最想念的还是家,对在深圳腾讯工作的HR湫湫来说,春节回家是一年中最期盼的事,不仅可以见到阔别已久的亲人,还能以相亲的名义调侃众多帅哥(她的内心告诉她:如果相亲能遇到参加过腾讯编程马拉松的同学,就直接把自己嫁了~)。
  同时,每年的春节湫秋也都会纠结一把,因为车票实在是太难抢了,不过2013的春节有点特殊,作为一个曾经的ACMer,湫湫制作出了很完美的刷票机,也就是说她再也不用担心买不上票了,但是想来想去还是觉得随便买票实在是浪费了辛辛苦苦搞出来的刷票机,所以她决定要用最舒适的方式回家。
  假设湫湫有可能经过的n个城市分别编号从1到n,湫湫要从城市A回到城市B,购票网站上列出了t辆列车行程,每辆车的行程用一个字符串表示,途径的城市间用+号相连,如1+2+3+5代表一辆从1城市分别经过2,3到达5的火车,湫湫可以从中间任意一站出发和下车(路径是单向的,即必须沿字符串从左到右来走),每个字符串对应着一个整数k,k=0表示该车只有硬座,k=1表示该车有卧铺也有硬座,在整个回家的计划中,同一辆车可以坐无限次,为了中途换车的方便,如果在起点坐的是卧铺,则后面乘坐的车必须全是卧铺,同样的,如果在起点坐的是硬座,则后面乘坐的车必须全是硬座,假设一段(一辆车行程中,两相邻城市间为一段)硬座的不舒适度是D1,一段卧铺的不舒适度是D2,求湫湫回家最小的不舒适度。
 
Input
  输入数据的第一行包含一个整数Q,表示测试数据的组数;
  每组数据的第一行是2个正整数n和t,分别表示城市数和列车数;
  接下来t行,每行一个字符串表示列车行程,字符串长度小于10000,每个字符串后跟一个整数k(k为0或1),之间用空格隔开;
  接下来一行是D1,D2,其含义见题目描述;
  最后一行是2个正整数A和B,表示起始和终点城市。

  [Technical Specification]
  1 <= Q <= 100
  1 < n <= 200
  1 < t <= 1000
  0 < D1 <= 10000, 0 < D2 <= 10000,D1和D2的大小关系不确定
  1 <= A, B <= n 且 A <> B

 
Output
  对于每组数据,如果湫湫可以到达目的地,则输出一个整数,表示湫湫到家所需的最小不舒适度。如果不能到达则直接输出-1。
 
Sample Input
1
6 5
2+4+3+5+1+6 1
5+4+2+3+1 1
3+2+5+1+6 1
6+2 0
6+3+1+4+5+2 0
3 2
5 3
 
Sample Output
4
 
Source
又遇到字符串建图题目,上次就被坑= =数字有可能大于10,这样长度就不确定了切记啊c
然后直接dij就好了200个点不必堆优化即可
#include<bits/stdc++.h>
using namespace std;
#define inf 0x3f3f3f3f
#define LL long long
#define ql(a,b) memset(a,b,sizeof(a))
int g1[205][205],g2[205][205];
LL D1,D2;
int d[205],n,vis[205];
int dij(int s,int e,int g[][205])
{
    memset(d,inf,sizeof(d));
    memset(vis,0,sizeof(vis));
    for(int i=1;i<=n;++i) d[i]=g[s][i];
    vis[s]=1;
    for(int i=2;i<=n;++i){
        int u=inf,minn=inf;
        for(int j=1;j<=n;++j)
            if(!vis[j]&&d[j]<minn) {minn=d[j];u=j;}
        if(u==inf) break;
        vis[u]=1;
        for(int j=1;j<=n;++j){
            if(!vis[j]&&g[u][j]!=inf){
                if(d[j]>d[u]+g[u][j])
                    d[j]=d[u]+g[u][j];
            }
        }
    }
    return d[e];
}
int main()
{
    int t,m,i,j,k;
    char s[100005+15];
    scanf("%d",&t);
    while(t--){ql(g1,inf),ql(g2,inf);
        scanf("%d %d",&n,&m);
        for(i=1;i<=n;++i) g1[i][i]=g2[i][i]=0;
        for(i=1;i<=m;++i){int temp=0,c;  bool pd=0;
            scanf(" %s %d",s,&k);
            int szs=strlen(s);
            if(szs<3) continue;
            for(j=0;j<szs;j++){
                if(isdigit(s[j])) temp=temp*10+s[j]-'0';
                if(s[j]=='+'){
                    if(!pd)   {c=temp;temp=0;pd=1;continue;}
                    else{ //cout<<c<<" "<<temp<<endl;
                        if(k==0) g1[c][temp]=1;
                        else g1[c][temp]=g2[c][temp]=1;
                        c=temp;
                        temp=0;
                    }
                }
            }
            if(k==0) g1[c][temp]=1;
            else g1[c][temp]=g2[c][temp]=1;
        }
        int S,E;
        LL ans1=inf,ans2=inf;
        scanf("%d %d",&D1,&D2);
        scanf("%d %d",&S,&E);
        ans1=min(ans1,(LL)dij(S,E,g1));
        ans2=min(ans2,(LL)dij(S,E,g2));
        if(ans1==inf&&ans2==inf) {puts("-1");continue;}
        if(ans1==inf) printf("%lld\n",ans2*D2);
        else if(ans2==inf) printf("%lld\n",ans1*D1);
        else printf("%lld\n",min(ans1*D1,ans2*D2));
    }
    return 0;
}
对于上面的字符串处理也可以使用函数,例如strtok()
for(i=1;i<=m;++i){int temp=0,c;  bool pd=0;
            scanf(" %s %d",s,&k);
            int szs=strlen(s);
            if(szs<3) continue;
            char *p;
            p=strtok(s,"+");
            while(p!=NULL){
                int a=atoi(p);
                p=strtok(NULL,"+");
                int b=atoi(p);
                if(p!=NULL) {
            if(k==0) g1[a][b]=1;
            else g1[a][b]=g2[a][b]=1;
                }
            }
        }
 

HDU 4522 (恶心建图)的更多相关文章

  1. hdu 4857 逆向建图+拓扑排序 ***

    题意:糟糕的事情发生啦,现在大家都忙着逃命.但是逃命的通道很窄,大家只能排成一行.现在有n个人,从1标号到n.同时有一些奇怪的约束条件,每个都形如:a必须在b之前.同时,社会是不平等的,这些人有的穷有 ...

  2. BZOJ 1924 && Luogu P2403 [SDOI2010]所驼门王的宝藏 恶心建图+缩点DP

    记住:map一定要这么用: if(mp[x[i]+dx[j]].find(y[i]+dy[j])!=mp[x[i]+dx[j]].end()) add(i,mp[x[i]+dx[j]][y[i]+dy ...

  3. bzoj 2304 [Apio2011]寻路 Dij+模拟+恶心建图

    [Apio2011]寻路 Time Limit: 20 Sec  Memory Limit: 256 MBSubmit: 624  Solved: 193[Submit][Status][Discus ...

  4. Leapin' Lizards HDU - 2732 (恶心的建图。。)

    这道题其实不难...就是建图恶心了点....emm... 题意: 多源多汇 + 拆边 青蛙跳柱子, 每根柱子都有一定的承载能力, 青蛙跳上去之后柱子的承载能力就会减一,跳到边界就能活 跳不到就over ...

  5. hdu 4444 Walk (离散化+建图+bfs+三维判重 好题)

    Walk Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Total Submi ...

  6. Food HDU - 4292 网络流 拆点建图

    http://acm.hdu.edu.cn/showproblem.php?pid=4292 给一些人想要的食物和饮料,和你拥有的数量,问最多多少人可以同时获得一份食物和一份饮料 写的时候一共用了2种 ...

  7. hdu 2647 (拓扑排序 邻接表建图的模板) Reward

    题目链接http://acm.hdu.edu.cn/showproblem.php?pid=2647 老板给员工发工资,每个人的基本工资都是888,然后还有奖金,然后员工之间有矛盾,有的员工希望比某员 ...

  8. HDU 4370 0 or 1(spfa+思维建图+计算最小环)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4370 题目大意:有一个n*n的矩阵Cij(1<=i,j<=n),要找到矩阵Xij(i< ...

  9. HDU 4725 The Shortest Path in Nya Graph(spfa+虚拟点建图)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4725 题目大意:有n层,n个点分布在这些层上,相邻层的点是可以联通的且距离为c,还有额外给出了m个条边 ...

随机推荐

  1. python设置redis过期时间

    import time import redis if __name__ == "__main__": try: conn=redis.StrictRedis(host='192. ...

  2. 约会安排---hdu4553(线段树,麻烦的区间覆盖)

      题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4553 算是poj3667的加强版,建立两颗线段树,一个是DS区间,另一个是NS区间.那么根据题意, ...

  3. Postgresql 正则表达式(转)

    原文:http://blog.csdn.net/wugewuge/article/details/7704996 postgresql支持POSIX 风格的正则表达式,在postgresql中使用正则 ...

  4. 爬虫Scrapy框架

    安装scrapy 在安装过程中报错:解决方案 通过在https://www.lfd.uci.edu/~gohlke/pythonlibs/#twisted,然后下载: CP后是python 版本,32 ...

  5. jQuery.outerWidth() 函数具体解释

    outerWidth()函数用于设置或返回当前匹配元素的外宽度.外宽度默认包含元素的内边距(padding).边框(border),但不包含外边距(margin)部分的宽度.你也能够指定參数为true ...

  6. git-【四】撤销修改和删除文件操作

    一:撤销修改: 比如我现在在readme.txt文件里面增加一行 内容为555555555555,我们先通过命令查看如下: 在未提交之前,发现添加5555555555555内容有误,所以得马上恢复以前 ...

  7. 【开发者笔记】C#连接mysql问题记录

    1.概述:C#在调用mysql.data.dll连接本地数据库时报错,连接远程Linux服务器上的mysql服务器正常 2.报错记录,当前连接字符串 <add key="dbStrin ...

  8. Zabbix设置自定义监控

    [zabbix]自定义监控项key值   说明: zabbix自带的默认模版里包括了很多监控项,有时候为了满足业务需求,需要根据自己的监控项目自定义监控项,这里介绍一种自定义监控项的方式. 1,首先编 ...

  9. 跟我学Makefile(四)

    使用函数:函数调用,很像变量的使用,也是以“$”来标识的,其语法如下: $(<function> <arguments>) 或是 ${<function> < ...

  10. Ajax保留浏览器历史的两种解决方案(Hash&Pjax)

    总是在github down点东西,github整个界面做的不错,体验也很好~对于其中的源代码滑动的特效最为喜欢了~刚开始以为这个只是普通的ajax请求效果,但是发现这个特效能够导致浏览器地址栏跟随变 ...