题目大意:

  有一个有向无环图,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的路径上的点找出来,否则会使无用的点对结果产生影响。

代码:

 #include<queue>
#include<vector>
#include<cstdio>
using namespace std;
const int N=,M=;
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];
bool vis[N],mark[N],flag[N];
vector <int> l[N],r[N]; int read()
{
int x=;
char ch=getchar();
while (ch<'' || ch>'') ch=getchar();
while (ch>='' && ch<='') x=(x<<)+(x<<)+ch-,ch=getchar();
return x;
} void add(int x,int y,int z)
{
v[++cnt]=y,last[cnt]=head[x],head[x]=cnt,w[cnt]=z;
} bool SPFA()
{
queue <int> q;
for (q.push(),vis[]=count[]=;!q.empty();)
for (x=q.front(),q.pop(),vis[x]=,i=head[x];i;i=last[i])
if (dist[y=v[i]]<w[i]+dist[x])
{
dist[y]=dist[x]+w[i];
if (!vis[y])
{
q.push(y),vis[y]=;
if (++count[y]>n) return ;
}
}
return ;
} void wk1(int x)
{
int i;
for (flag[x]=,i=;i<l[x].size();i++)
if (!flag[l[x][i]]) wk1(l[x][i]);
} void wk2(int x)
{
int i;
for (mark[x]=,i=;i<r[x].size();i++)
if (!mark[r[x][i]]) wk2(r[x][i]);
} int main()
{
for (n=read(),m=read(),i=;i<=m;i++) a[i]=read(),b[i]=read();
for (i=;i<=m;i++) l[a[i]].push_back(b[i]),r[b[i]].push_back(a[i]);
for (wk1(),wk2(n),i=;i<=n;i++) flag[i]&=mark[i];
for (i=;i<=m;i++)
if (flag[a[i]] && flag[b[i]]) add(a[i],b[i],),add(b[i],a[i],-);
if (SPFA()) puts("No");
else
for (puts("Yes"),i=;i<=m;i++)
if (flag[a[i]] && flag[b[i]]) printf("%d\n",dist[b[i]]-dist[a[i]]);
else puts("");
return ;
}

最新文章

  1. poj3417 LCA + 树形dp
  2. mysql基准测试
  3. VS2010+OpenCV2.4.6永久性配置方法
  4. Eclipse常用设置(转)
  5. Tomcat编码问题
  6. python 内建函数 filter,map和reduce
  7. git 实用命令
  8. JDBC学生管理系统--处理分页显示
  9. 佳博GprinterApp编辑软件使用说明
  10. PHP安全编程:跨站脚本攻击的防御(转)
  11. Android 多线程:使用Thread和Handler (从网络上获取图片)
  12. hadoop集群的搭建与配置(2)
  13. Java SE ——TCP协议网络编程(三)
  14. GTK+2.0学习——code::block使用
  15. 如何迅速成为Java高手
  16. LeetCode 280. Wiggle Sort (摆动排序)$
  17. PHP namespace、require、use区别
  18. Linux 各种软件的安装-Jenkins和svn结合
  19. thymeleaf 字符串的拼接
  20. python的logging日志模块

热门文章

  1. ASP.NET的Cookie和Session
  2. Android屏幕旋转总结
  3. 重温WCF之WCF传输安全(十三)(3)基于SSL的WCF对客户端验证(转)
  4. 重温WCF之发送和接收SOAP头(三)
  5. Delphi的文件操作
  6. Bootstrap 表格 笔记
  7. 【翻译六】java-连接和实例
  8. 【PHP小项目使用MVC架构】
  9. Git学习笔记 git revert
  10. 攻城狮在路上(壹) Hibernate(二)--- 第一个hibernate程序