关于拓扑排序的问题-P3116 [USACO15JAN]会议时间Meeting Time
2017-02-26 17:51
417 查看
https://www.luogu.org/problem/show?pid=3116
这道题目很水啊,但是我没有1A,而且wa了好多;
题目意思我就不讲了;
反正就是一个拓扑序dp;
但是这道题目规定了起点是1;
所以我一开始直接把1放进队列里然后拓扑;
就哇了;
原因很简单;
除了1以外,还有很多入度为0的点;
(当然1的入度可能不为0,没关系)
如果我直接从1遍历;
就会导致有些点的入度永远不为0;
所以我们要先吧把的入度==0的非1点先跑一遍拓扑;
跑完后,整个图只有1是入度为0的了;
这样再从1开始跑;
这道题目很水啊,但是我没有1A,而且wa了好多;
题目意思我就不讲了;
反正就是一个拓扑序dp;
但是这道题目规定了起点是1;
所以我一开始直接把1放进队列里然后拓扑;
就哇了;
原因很简单;
除了1以外,还有很多入度为0的点;
(当然1的入度可能不为0,没关系)
如果我直接从1遍历;
就会导致有些点的入度永远不为0;
所以我们要先吧把的入度==0的非1点先跑一遍拓扑;
跑完后,整个图只有1是入度为0的了;
这样再从1开始跑;
#include<cstdio>//cfb #include<iostream> #include<cstring> using namespace std; struct cs{int to,next,A,B;}a[100001]; int head[101],s[101],q[105]; bool aa[101][20001],bb[101][20001]; int n,m,x,y,z,A,B,ll,l,r; void init(int x,int y,int A,int B){ ll++; a[ll].to=y; a[ll].A=A; a[ll].B=B; a[ll].next=head[x]; head[x]=ll; } int main() { scanf("%d%d",&n,&m); for(int i=1;i<=m;i++){ scanf("%d%d%d%d",&x,&y,&A,&B); init(x,y,A,B); s[y]++; } for(int i=2;i<=n;i++)if(!s[i])q[++r]=i; while(r>l){ x=q[++l]; for(int k=head[x];k;k=a[k].next){ y=a[k].to; if(!--s[y])q[++r]=y; } } q[1]=1; aa[1][0]=bb[1][0]=1; r=1; l=0; while(r>l){ x=q[++l]; for(int k=head[x];k;k=a[k].next){ y=a[k].to; s[y]--; if(!s[y])q[++r]=y; for(int i=0;i<=10000;i++){ if(aa[x][i])aa[y][i+a[k].A]=1; if(bb[x][i])bb[y][i+a[k].B]=1; } } } for(int i=0;i<=10000;i++)if(aa [i]&&bb [i]){ printf("%d",i);return 0; } printf("IMPOSSIBLE"); }
相关文章推荐
- P3116 [USACO15JAN]会议时间Meeting Time
- 洛谷P3116 [USACO15JAN]约会时间Meeting Time
- luogu P3116 [USACO15JAN]会议时间Meeting Time
- luogu P3116 [USACO15JAN]约会时间Meeting Time
- 关于算法的时间复杂度问题的思考
- 关于Web服务器时间格式问题
- 7月13日下午的会议记录[关于本次聚会预支经费的问题]
- jsp 中关于日期时间处理的几个问题
- 关于动态生成列的DATAGRID不能出发模板列的时间问题
- C#关于DateTime得到的当前时间的格式问题(转 自己用)
- 关于WM_NOTIFY与消息反射————耗费我两天时间才解决的问题
- 请问页面上关于时间校验问题。
- 一个关于时间的SQL分组排序问题
- 关于JavaScript处理时间跨度差问题的一个小细节
- 关于统计统计程序运行时间的问题
- 关于“超时时间已到”的问题,终于解决了
- 关于系统时间被改问题的解决办法
- 关于“超时时间已到”的问题
- 关于时间问题的经典处理方法
- 关于“超时时间已到”的问题