UvaLive 4255 Guess(拓扑排序)
来源:互联网 发布:微信h5制作软件 编辑:程序博客网 时间:2024/05/16 14:43
题目地址:https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=2256
思路:
1.对于前缀和sum[i]、sum[j]:若i到j的和为负数,则连边(i-1)--->j(代表sum[j]-sum[i-1]<0,即sum[j]<sum[i-1]);若和为正数,则连边j--->(i-1)(代表sum[j]-sum[i-1]>0,即sum[j]>sum[i-1])。
2.进行拓扑排序:从10开始赋值sum[i],依次递减(节点数只有10,最小减到1),每次对于入度为0的点将其赋同一值(保证等于0的情况)。
3.a[i]=sum[i]-sum[i-1],最大值为10,最小值为1,保证在-10到10范围内。
#include<cstdio>#include<queue>#include<vector>#include<cstring>#include<iostream>#include<algorithm>#define debugusing namespace std;const int maxn=100;int n;int d[maxn];queue<int> q;int sum[maxn];vector<int> g[maxn];void topsort(){ while(!q.empty()) q.pop(); int cnt=10; for(int i=0; i<=n; i++) { if(d[i]==0) { q.push(i); sum[i]=cnt; } } while(!q.empty()) { int now=q.front(); q.pop(); cnt--; for(int i=0; i<g[now].size(); i++) { int nt=g[now][i]; if(--d[nt]==0) { sum[nt]=cnt; q.push(nt); } } }}void init(){ memset(d,0,sizeof(d)); for(int i=0; i<=n; i++) g[i].clear();}int main(){#ifdef debu freopen("in.txt","r",stdin);#endif // debug int t; scanf("%d",&t); while(t--) { scanf("%d",&n); init(); getchar(); for(int i=1; i<=n; i++) { for(int j=i; j<=n; j++) { char ch; scanf("%c",&ch); if(ch=='-') { g[i-1].push_back(j); d[j]++; } else if(ch=='+') { g[j].push_back(i-1); d[i-1]++; } } } topsort(); for(int i=1; i<=n; i++) { if(i!=1) printf(" "); printf("%d",sum[i]-sum[i-1]); } printf("\n"); } return 0;}
阅读全文
0 0
- UValive 4255 Guess(拓扑排序)
- UVALive - 4255 - Guess (拓扑排序)
- UvaLive 4255 Guess(拓扑排序)
- UVALive 4255 Guess【拓扑排序 】
- UVALive 4255-Guess-拓扑排序
- UVALive 4255 Guess(前缀和+拓扑排序)
- UA 4255 Guess (拓扑排序)
- LA 4255 Guess 拓扑排序
- LA4255 Guess (拓扑排序)
- UVALive 4255 拓扑排序
- uva 1423 - Guess(拓扑排序)
- uva 1423 - Guess(拓扑排序)
- UVALive4255-Guess(拓扑排序)
- UvaLive-4255-Guess
- UVALive - 4255 Guess
- UVALive - 4255 Guess
- UVALive 4255 Guess
- UVALive 4255 Guess
- 深入理解Java虚拟机之一运行时数据区域
- JavaScript实现简单的图片轮播(通过点击左右焦点切换)
- 逻辑运算与循环结构
- Oracle 高级子查询
- PAT-A 1005. Spell It Right (20)
- UvaLive 4255 Guess(拓扑排序)
- 【干货】Linux服务器高并发调优实战
- Spring AOP 实现原理
- 【代码笔记】iOS-手机版本号,机型,操作系统版本,设备唯一标识符
- 2017.8.22
- 数据库切分(4)之全局主键生成策略
- Unity时间管理类,用来做一些方法的延迟调用
- 正则表达式
- Servlet.init() for servlet despatcherServlet threw exception,AopProxyUtils.getSingletonTarget(Ljava/