Time Limit: 1 second

Memory Limit: 128 MB

【问题描述】

小明要去一个国家旅游。这个国家有N个城市,编号为1~N,并且有M条道路连接着,小明准备从其中一个城市出发,并只往东走到城市i停止。 所以他就需要选择最先到达的城市,并制定一条路线以城市i为终点,使得线路上除了第一个城市,每个城市都在路线前一个城市东面,并且满足这个前提下还希望游览的城市尽量多。 现在,你只知道每一条道路所连接的两个城市的相对位置关系,但并不知道所有城市具体的位置。现在对于所有的i,都需要你为小明制定一条路线,并求出以城市i为终点最多能够游览多少个城市。

【输入格式】

输入文件plan.in的第1行为两个正整数N, M。 接下来M行,每行两个正整数x, y,表示了有一条连接城市x与城市y的道路,保证了城市x在城市y西面。

【输出格式】

输出文件plan.out包括N行,第i行包含一个正整数,表示以第i个城市为终点最多能游览多少个城市。

【数据规模】

对于20%的数据,N ≤ 100; 对于60%的数据,N ≤ 1000; 对于100%的数据,N ≤ 100000,M ≤ 200000。

Sample Input1

5 6

1 2

1 3

2 3

2 4

3 4

2 5

Sample Output1

1

2

3

4

3

【样例说明】

均选择从城市1出发可以得到以上答案。

【题目链接】:http://noi.qz5z.com/viewtask.asp?id=u114

【题解】



设f[i]为以i作为终点最多能访问的城市个数;

因为有从西到东的规律(只能向东走);所以先找出最西边的那些点(入度为0的点);

从那些点开始进行拓扑排序;在进行拓扑排序的时候进行DP搞一搞就可以了;

因为是最西边的点,所以从那些点开始、最后一定能搞到所有点的正确答案(经过的城市最多);

写记搜会爆栈、而且不知道怎么回事。。



【完整代码】

  1. #include <cstdio>
  2. #include <cstdlib>
  3. #include <cmath>
  4. #include <set>
  5. #include <map>
  6. #include <iostream>
  7. #include <algorithm>
  8. #include <cstring>
  9. #include <queue>
  10. #include <vector>
  11. #include <stack>
  12. #include <string>
  13. using namespace std;
  14. #define lson l,m,rt<<1
  15. #define rson m+1,r,rt<<1|1
  16. #define LL long long
  17. #define rep1(i,a,b) for (int i = a;i <= b;i++)
  18. #define rep2(i,a,b) for (int i = a;i >= b;i--)
  19. #define mp make_pair
  20. #define pb push_back
  21. #define fi first
  22. #define se second
  23. typedef pair<int,int> pii;
  24. typedef pair<LL,LL> pll;
  25. void rel(LL &r)
  26. {
  27. r = 0;
  28. char t = getchar();
  29. while (!isdigit(t) && t!='-') t = getchar();
  30. LL sign = 1;
  31. if (t == '-')sign = -1;
  32. while (!isdigit(t)) t = getchar();
  33. while (isdigit(t)) r = r * 10 + t - '0', t = getchar();
  34. r = r*sign;
  35. }
  36. void rei(int &r)
  37. {
  38. r = 0;
  39. char t = getchar();
  40. while (!isdigit(t)&&t!='-') t = getchar();
  41. int sign = 1;
  42. if (t == '-')sign = -1;
  43. while (!isdigit(t)) t = getchar();
  44. while (isdigit(t)) r = r * 10 + t - '0', t = getchar();
  45. r = r*sign;
  46. }
  47. const int MAXN = 1e5+100;
  48. const int MAXM = 2e5+100;
  49. const int dx[9] = {0,1,-1,0,0,-1,-1,1,1};
  50. const int dy[9] = {0,0,0,-1,1,-1,1,-1,1};
  51. const double pi = acos(-1.0);
  52. int n,m;
  53. int f[MAXN],du[MAXN];
  54. queue <int> dl;
  55. vector <int> g[MAXN];
  56. int main()
  57. {
  58. //freopen("F:\\rush.txt","r",stdin);
  59. rei(n);rei(m);
  60. rep1(i,1,m)
  61. {
  62. int x,y;
  63. rei(x);rei(y);
  64. g[x].pb(y);
  65. du[y]++;
  66. }
  67. rep1(i,1,n)
  68. if (du[i]==0)
  69. {
  70. dl.push(i);
  71. f[i] = 1;
  72. du[i]=-1;
  73. }
  74. while (!dl.empty())
  75. {
  76. int x = dl.front();
  77. dl.pop();
  78. int len = g[x].size();
  79. rep1(i,0,len-1)
  80. {
  81. int y = g[x][i];
  82. f[y] = max(f[x]+1,f[y]);
  83. du[y]--;
  84. if (!du[y])
  85. {
  86. dl.push(y);
  87. du[y] = -1;
  88. }
  89. }
  90. }
  91. rep1(i,1,n)
  92. printf("%d\n",f[i]);
  93. return 0;
  94. }

【u114】旅行计划(12月你好)的更多相关文章

  1. 安恒X计划12月月赛

    ezweb 主要是序列化问题.没有PHP环境,在线运行的.实例化对象之后修改一下file.然后echo输出序列化的结果.不过下面有一个正则检查.数字前加一个+,影响了正则的匹配,但是对于序列化的还原没 ...

  2. 12月14日《奥威Power-BI销售计划填报》腾讯课堂开课啦

           2016年的最后一个月也过半了,新的一年就要到来,你是否做好了启程的准备?新的一年,有计划,有目标,有方向,才不至于迷茫.规划你的2017,新的一年,遇见更好的自己!        所以 ...

  3. 2018年12月8日广州.NET微软技术俱乐部活动总结

    吕毅写了一篇活动总结,写得很好!原文地址是:https://blog.walterlv.com/post/december-event-microsoft-technology-salon.html ...

  4. 微软将于12月起开始推送Windows 10 Mobile

    [环球科技报道 记者 陈薇]据瘾科技网站10月8日消息,根据微软Lumia官方Faceboo发布的消息,新版系统Windows 10 Mobile 将会12月起陆续开始推送. 推送的具体时程根据地区. ...

  5. 牛客ACM赛 B [小a的旅行计划 ]

    链接 B 小a的旅行计划 把\(n\)个数中选任意数分成\(a,b\)两个集合,集合无区别,要求不包含且有交,求方案数.\(n\leq 10^{13}\) 首先讨论\(a,b\)并集是否为全集: 若是 ...

  6. 22.Express框架——2019年12月19日

    2019年12月19日14:16:36 1. express简介 1.1 介绍 Express框架是后台的Node框架,所以和jQuery.zepto.yui.bootstrap都不一个东西. Exp ...

  7. 12月18日风险投资速递:Facebook收购实时体育数据提供商Sport Stream

    国内公司 1.手游公司成都掌沃无限获得近千万元天使投资 成都掌沃无限成立于2013年,是一家新成立的手机游戏开发商,创始人及CEO张涛拥有超过10年的游戏行业从业经验和连续创业经历,其首款游戏产品为& ...

  8. [Erlang 0114] Erlang Resources 小站 2013年7月~12月资讯合集

    Erlang Resources 小站 2013年7月~12月资讯合集,方便检索.     附 2013上半年盘点: Erlang Resources 小站 2013年1月~6月资讯合集    小站地 ...

  9. 12月22日《奥威Power-BI财务报表数据填报》腾讯课堂开课啦

    一扇可以通向任何地方的“任意门”,是我们多少人幼时最梦寐以求的道具之一.即使到了现在,工作中的我们还会时不时有“世界那么大,我想去看看”的念头,或者在突然不想工作的时刻,幻想着自己的家门变成了“任意门 ...

随机推荐

  1. <一> 爬虫的原理

    一.爬虫是什么? #1.什么是互联网? 互联网是由网络设备(网线,路由器,交换机,防火墙等等)和一台台计算机连接而成,像一张网一样. #2.互联网建立的目的? 互联网的核心价值在于数据的共享/传递:数 ...

  2. HDU 2844 Coins (多重背包计数 空间换时间)

    Coins Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Subm ...

  3. thinkphp3.1课程 1-2 thinkphp中入口文件的实质是什么

    thinkphp3.1课程 1-2 thinkphp中入口文件的实质是什么 一.总结 一句话总结:在thinkphp中,我们访问的始终是入口文件,并没有主动去访问任何一个其他文件,只不过在入口文件体内 ...

  4. 8.3 Android灯光系统_编写HAL_lights.c

    注意在led-classes.c中定义的led_class_attrs[]所建立的文件的属性应该改为0666,否则应用程序无权操作它 同时ledtrig-time.c里面对应新建的那几个delay_o ...

  5. ASIC DC综合的理解

    ASIC DC综合的理解 DC综合流程 输入设计文件+指定的工艺库文件+约束文件 经过DC的综合,输出满足期望的门级网表及综合报告 输入输出数据 输入文件:设计文件(verilog等).工艺库(db) ...

  6. Python爬虫之路——简单的网页抓图

    转载自我自己的博客:http://www.mylonly.com/archives/1401.html 用Python的urllib2库和HTMLParser库写了一个简单的抓图脚本.主要抓的是htt ...

  7. matplotlib学习之散点图与条形图

    # coding:utf-8 from matplotlib import pyplot as plt import numpy as np plt.style.use('ggplot') x = n ...

  8. vim :g

    https://stackoverflow.com/questions/1946738/vim-how-to-delete-every-second-row An elegant (and effic ...

  9. struts2-token防止重复提交解决办法

    1.配置struts.xml全局防重复提交拦截器栈: <struts> <package name="module" extends="struts-d ...

  10. ios开发之级联菜单(两个tableView实现)

    一:在ios项目实际开发中经常会看到级联菜单的效果:如图:点击左侧菜单,右侧菜单刷新数据.此篇用两个tableView来实现如图效果: 二:代码: 1:构造数据模型:利用kvc快速构建数据模型 #im ...