题目描述

Description

Input

Output

若无解,则输出”Impossible”。

否则第一行输出”Possible”,第二行输出 n 个正整数,依次输出序列 a 中每个数。

Sample Input

5 2 2

2 7

5 3

1 4 2 2 3

4 5 1 4

Sample Output

Possible

6 7 1000000000 6 3

Data Constraint

题解

线段树优化连边

ki向xij连边,xi与xi+1间的点向ki连边(线段树),线段树的点从下往上连边

一条从u到v的权值为s的边的意义是f[u]+s<=f[v],拓扑求max即可

初值就是给出的p和d(不需要求出相对大小然后再搞)

code

  1. #include <algorithm>
  2. #include <iostream>
  3. #include <cstdlib>
  4. #include <cstring>
  5. #include <cstdio>
  6. #define fo(a,b,c) for (a=b; a<=c; a++)
  7. #define fd(a,b,c) for (a=b; a>=c; a--)
  8. #define min(a,b) (a<b?a:b)
  9. #define max(a,b) (a>b?a:b)
  10. using namespace std;
  11. struct type{
  12. int s,x;
  13. } b[100001];
  14. int a[5000001][3];
  15. int D[1000001];
  16. int ls[1000001];
  17. int d[1000001];
  18. int f[1000001];
  19. int F[1000001];
  20. int c[100002];
  21. int N,n,s,m,i,j,k,l,len,L,R,tot,h,t,mx;
  22. void New(int x,int y,int z)
  23. {
  24. ++len;
  25. a[len][0]=y;
  26. a[len][1]=ls[x];
  27. ls[x]=len;
  28. a[len][2]=z;
  29. ++D[y];
  30. }
  31. void mt(int t,int l,int r)
  32. {
  33. int mid=(l+r)/2;
  34. N=max(N,t+n);
  35. if (l==r) return;
  36. mt(t*2,l,mid);
  37. if (l<mid)
  38. New(t*2+n,t+n,0);
  39. else
  40. New(l,t+n,0);
  41. mt(t*2+1,mid+1,r);
  42. if (mid+1<r)
  43. New(t*2+1+n,t+n,0);
  44. else
  45. New(r,t+n,0);
  46. }
  47. void work(int t,int l,int r,int x,int y)
  48. {
  49. int mid=(l+r)/2;
  50. if (x<=l && r<=y)
  51. {
  52. if (l==r)
  53. New(l,N,1);
  54. else
  55. New(t+n,N,1);
  56. return;
  57. }
  58. if (x<=mid)
  59. work(t*2,l,mid,x,y);
  60. if (mid<y)
  61. work(t*2+1,mid+1,r,x,y);
  62. }
  63. int main()
  64. {
  65. freopen("web.in","r",stdin);
  66. freopen("web.out","w",stdout);
  67. scanf("%d%d%d",&n,&s,&m);
  68. fo(i,1,n) f[i]=1;
  69. fo(i,1,s)
  70. scanf("%d%d",&b[i].x,&b[i].s),f[b[i].x]=b[i].s,F[b[i].x]=b[i].s;
  71. mt(1,1,n);
  72. fo(i,1,m)
  73. {
  74. ++N;
  75. scanf("%d%d%d",&L,&R,&tot);
  76. fo(j,1,tot)
  77. {
  78. scanf("%d",&c[j]);
  79. New(N,c[j],0);
  80. }
  81. c[0]=L-1;
  82. c[++tot]=R+1;
  83. fo(j,1,tot)
  84. if (c[j-1]+1<=c[j]-1)
  85. work(1,1,n,c[j-1]+1,c[j]-1);
  86. }
  87. h=0;t=0;
  88. fo(i,1,N)
  89. if (!D[i])
  90. d[++t]=i;
  91. while (h<t)
  92. {
  93. for (i=ls[d[++h]]; i; i=a[i][1])
  94. {
  95. f[a[i][0]]=max(f[a[i][0]],f[d[h]]+a[i][2]);
  96. if (F[a[i][0]] && f[a[i][0]]>F[a[i][0]])
  97. {
  98. printf("Impossible\n");
  99. return 0;
  100. }
  101. --D[a[i][0]];
  102. if (!D[a[i][0]])
  103. d[++t]=a[i][0];
  104. }
  105. }
  106. if (t<N)
  107. {
  108. printf("Impossible\n");
  109. return 0;
  110. }
  111. else
  112. {
  113. printf("Possible\n");
  114. fo(i,1,n)
  115. printf("%d ",f[i]);
  116. printf("\n");
  117. }
  118. fclose(stdin);
  119. fclose(stdout);
  120. return 0;
  121. }

6411. 【NOIP2019模拟11.06】上网的更多相关文章

  1. 6409. 【NOIP2019模拟11.06】困难的图论(Tarjan求点双)

    题目描述 Description 给定由 n 个点 m 条边组成的无向连通图,保证没有重边和自环. 你需要找出所有边,满足这些边恰好存在于一个简单环中.一个环被称为简单环,当且仅当它包含的所有点都只在 ...

  2. 6423. 【NOIP2019模拟11.11】画

    题目描述 Description Input Output Sample Input 3 2 3 3 6 5 1 2 1 3 Sample Output 15 Data Constraint 题解 迫 ...

  3. 6407. 【NOIP2019模拟11.05】小 D 与随机

    题目描述 Description Input 第一行两个个整数 n,k. 之后 n -1 行,第 i 行两个整数 ui, vi, 表示一条树边. 保证输入的数据构成一棵树. Output 一行一个数表 ...

  4. 6402. 【NOIP2019模拟11.01】Cover(启发式合并)

    题目描述 Description 小 A 现在想用

  5. jzoj6404. 【NOIP2019模拟11.04】B

    题目描述 Description Input 从文件b.in中读入数据. 第丬行三个正整数 n, m, K. 接下来 n 行每行 m 个正整数, 表示矩阵A. Output 输出到文件b.out中. ...

  6. 【NOIP2019模拟11.01】Game(贪心+线段树)

    Description: ​ 小 A 和小 B 在玩一个游戏,他们两个人每人有

  7. 11.06水题Test

    11.06水题比赛 题目 描述 做法 \(BSOJ5150\) 求\(n\)个数两两之差的中位数 二分中位数,双指针判定\(\le x\)差值对数 \(BSOJ5151\) 求树的最大匹配和其个数 来 ...

  8. JZOJ 3509. 【NOIP2013模拟11.5B组】倒霉的小C

    3509. [NOIP2013模拟11.5B组]倒霉的小C(beats) (File IO): input:beats.in output:beats.out Time Limits: 1000 ms ...

  9. JZOJ 3508. 【NOIP2013模拟11.5B组】好元素

    3508. [NOIP2013模拟11.5B组]好元素(good) (File IO): input:good.in output:good.out Time Limits: 2000 ms  Mem ...

随机推荐

  1. fiddler之模拟请求超时和弱网模式

    在针对手机端测试时,很多情况下我们需要测试响应超时和弱网情况的响应情况.此时可以使用fiddler提供的断点和弱网功能进行测试. 1.请求超时 设置断点,是请求响应超时.查看请求结果. Rules-- ...

  2. 中国MOOC_零基础学Java语言_第5周 数组_1多项式加法

    第5周编程题 查看帮助 返回   第5周编程题 依照学术诚信条款,我保证此作业是本人独立完成的. 温馨提示: 1.本次作业属于Online Judge题目,提交后由系统即时判分. 2.学生可以在作业截 ...

  3. $apply()和$digest()——angular

    $apply()和$digest()在AngularJS中是两个核心概念,但是有时候它们又让人困惑.而为了了解AngularJS的工作方式,首先需要了解$apply()和$digest()是如何工作的 ...

  4. Jmeter 接口测试 响应结果中文是Unicode转为中文

    1.增加一个后置处理器:BeanShell PostProcessor 内容如下: //获取响应代码Unicode编码的        String s2=new String(prev.getRes ...

  5. fiddler过滤机制讲解

    1.User Fiters启用 2.Action Action:Run Filterset now是否运行,Load Filterset加载,Save Filterset保存: 3.Hosts过滤 Z ...

  6. 【MM系列】SAP 物料进销存报表查看

    公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[MM系列]在SAP里查看数据的方法   前言部 ...

  7. P1141零一迷宫

    这是一道对于除了我之外其他人都十分简单的搜索题,我终于在这个夜里搞会了. 首先其问可以到达多少个点,并不是走一次可以最多经过几个点,这就解释了为什么不需要回溯,并且递归边界则是让其全部走完即可.于是便 ...

  8. 遍历文件夹下的csv,把数据读进一张表

    import pandas as pd import os if __name__ == '__main__': Path = 'c:\checklog' dfs = [] for dir_path, ...

  9. python day1-requests

    一.什么是requests Requests是用python语言基于urllib编写的,采用的是Apache2 Licensed开源协议的HTTP库. 相对于urllib库(自带,无需手动安装)而言, ...

  10. P2523 [HAOI2011]Problem c

    传送门 先考虑如何判断无解,设 $sum[i]$ 表示确定的人中,编号大于 $i$ 的人的人数 如果 $sum[i]>n-i+1$ 则无解,进一步考虑设 $f[i][j]$ 表示当前确定完编号大 ...