题目大意:

  有一个有向无环图,n个点m条边,所有边权为1或2,求一组使所有从1到n的路径长度相同的边权的方案。

思路:

  设从1到i的最短路为dist[i],若有一条从x到y的边,则1<=dist[y]-dist[x]<=2,即dist[y]-dist[x]>=1且dist[x]-dist[y]>=-2,有了这个约束条件,就可以跑差分约束了。不过跑之前要先把从1到n的路径上的点找出来,否则会使无用的点对结果产生影响。

代码:

  1. #include<queue>
  2. #include<vector>
  3. #include<cstdio>
  4. using namespace std;
  5. const int N=,M=;
  6. int cnt,n,m,i,x,y,h,t,a[M],b[M],v[M<<],pre[N],last[M<<],w[M<<],head[N],dist[N],count[N];
  7. bool vis[N],mark[N],flag[N];
  8. vector <int> l[N],r[N];
  9.  
  10. int read()
  11. {
  12. int x=;
  13. char ch=getchar();
  14. while (ch<'' || ch>'') ch=getchar();
  15. while (ch>='' && ch<='') x=(x<<)+(x<<)+ch-,ch=getchar();
  16. return x;
  17. }
  18.  
  19. void add(int x,int y,int z)
  20. {
  21. v[++cnt]=y,last[cnt]=head[x],head[x]=cnt,w[cnt]=z;
  22. }
  23.  
  24. bool SPFA()
  25. {
  26. queue <int> q;
  27. for (q.push(),vis[]=count[]=;!q.empty();)
  28. for (x=q.front(),q.pop(),vis[x]=,i=head[x];i;i=last[i])
  29. if (dist[y=v[i]]<w[i]+dist[x])
  30. {
  31. dist[y]=dist[x]+w[i];
  32. if (!vis[y])
  33. {
  34. q.push(y),vis[y]=;
  35. if (++count[y]>n) return ;
  36. }
  37. }
  38. return ;
  39. }
  40.  
  41. void wk1(int x)
  42. {
  43. int i;
  44. for (flag[x]=,i=;i<l[x].size();i++)
  45. if (!flag[l[x][i]]) wk1(l[x][i]);
  46. }
  47.  
  48. void wk2(int x)
  49. {
  50. int i;
  51. for (mark[x]=,i=;i<r[x].size();i++)
  52. if (!mark[r[x][i]]) wk2(r[x][i]);
  53. }
  54.  
  55. int main()
  56. {
  57. for (n=read(),m=read(),i=;i<=m;i++) a[i]=read(),b[i]=read();
  58. for (i=;i<=m;i++) l[a[i]].push_back(b[i]),r[b[i]].push_back(a[i]);
  59. for (wk1(),wk2(n),i=;i<=n;i++) flag[i]&=mark[i];
  60. for (i=;i<=m;i++)
  61. if (flag[a[i]] && flag[b[i]]) add(a[i],b[i],),add(b[i],a[i],-);
  62. if (SPFA()) puts("No");
  63. else
  64. for (puts("Yes"),i=;i<=m;i++)
  65. if (flag[a[i]] && flag[b[i]]) printf("%d\n",dist[b[i]]-dist[a[i]]);
  66. else puts("");
  67. return ;
  68. }

CodeForces - 241E Flights 题解的更多相关文章

  1. Codeforces Round #556 题解

    Codeforces Round #556 题解 Div.2 A Stock Arbitraging 傻逼题 Div.2 B Tiling Challenge 傻逼题 Div.1 A Prefix S ...

  2. Codeforces Round #569 题解

    Codeforces Round #569 题解 CF1179A Valeriy and Deque 有一个双端队列,每次取队首两个值,将较小值移动到队尾,较大值位置不变.多组询问求第\(m\)次操作 ...

  3. Codeforces Round #557 题解【更完了】

    Codeforces Round #557 题解 掉分快乐 CF1161A Hide and Seek Alice和Bob在玩捉♂迷♂藏,有\(n\)个格子,Bob会检查\(k\)次,第\(i\)次检 ...

  4. CFEducational Codeforces Round 66题解报告

    CFEducational Codeforces Round 66题解报告 感觉丧失了唯一一次能在CF上超过wqy的机会QAQ A 不管 B 不能直接累计乘法打\(tag\),要直接跳 C 考虑二分第 ...

  5. codeforces CF475 ABC 题解

    Bayan 2015 Contest Warm Up http://codeforces.com/contest/475 A - Bayan Bus B - Strongly Connected Ci ...

  6. Codeforces Round #542 题解

    Codeforces Round #542 abstract I决策中的独立性, II联通块染色板子 IIIVoronoi diagram O(N^2 logN) VI环上距离分类讨论加取模,最值中的 ...

  7. Codeforces 576D Flights for Regular Customers (图论、矩阵乘法、Bitset)

    题目链接 http://codeforces.com/contest/576/problem/D 题解 把边按\(t_i\)从小到大排序后枚举\(i\), 求出按前\((i-1)\)条边走\(t_i\ ...

  8. Codeforces Choosing Laptop 题解

    这题实在是太水了,具体看注释 蒟蒻的方法是一边找过时的电脑一边比大小 蒟蒻不才,只会C++ 其实还会free basic,但它已经过时了 附: 本题洛谷网址 Codeforces网址 希望蒟蒻的题解能 ...

  9. CF 241E flights 最短路,重复迭代直到稳定 难度:3

    http://codeforces.com/problemset/problem/241/E 首先检测哪些点会出现在从起点到终点的路上,可以用dfs或者迭代, 然后,对于所有的边,设f为边起点,t为边 ...

随机推荐

  1. javascript - 浏览器对象

    Navigator对象 弹出窗口 Cookies Browser Objects 参考手册 参考手册描述了每个对象的属性和方法,并提供了在线实例. Window 对象 Navigator 对象 Scr ...

  2. Datagard產生gap

    本文轉載自無雙的小寶的博客:http://www.cnblogs.com/sopost/archive/2010/09/11/2190085.html 有時候因為網路或備份故障等原因,主機所產生的歸檔 ...

  3. [Linux] 取得服务器版本

    1) 登录到服务器执行 lsb_release -a ,即可列出所有版本信息,例如: [root@3.5.5Biz-46 ~]# lsb_release -a LSB Version: 1.3 Dis ...

  4. C++模板【转】

    1. 模板的概念. 我们已经学过重载(Overloading),对重载函数而言,C++的检查机制能通过函数参数的不同及所属类的不同.正确的调用重载函数.例如,为求两个数的最大值,我们定义MAX()函数 ...

  5. python 多态

    多态 类具有继承关系,并且子类类型可以向上转型看做父类类型,如果我们从 Person 派生出 Student和Teacher ,并都写了一个 whoAmI() 方法: class Person(obj ...

  6. MySQL客户端工具推荐

    PhpMyAdmin 傻瓜级的 Web 页面管理器,无需到处安装,只需一台支持 PHP 运行环境的服务器 功能上一般只限数据表的增删改查 在一台安装了phpmyadmin的机器上是可以连其它服务器上的 ...

  7. 设置type为file的input标签选择图片类型

    设置能选择各种类型的图片如:png,jpg <input id="file" name="file" type="file" acce ...

  8. Swift3.0语言教程字符串大小写转化

    Swift3.0语言教程字符串大小写转化 Swift3.0语言教程字符串大小写转化,在字符串中,字符串的格式是很重要的,例如首字母大写,全部大写以及全部小写等.当字符串中字符很多时,通过人为一个一个的 ...

  9. ASP.NET MVC3 中整合 NHibernate3.3、Spring.NET2.0 使用AOP执行事务处理

    方法1 <object id="ServiceOperation" type="Spring.Aop.Support.SdkRegularExpressionMet ...

  10. [bzoj3813]奇数园

    仿佛现在已经完成了做题之前先开个坑的习惯,也许是为了逼迫自己去刷一些神题吧...然并卵,该剩的好多坑还是剩着呢. [bzoj3813]一道线段树好题.已经把数论忘光光了. 欧几里德算法 扩展欧几里德算 ...