多校联合训练7&&HDU5813
来源:互联网 发布:贴吧爆吧软件安卓 编辑:程序博客网 时间:2024/05/04 20:08
【题意】给定一个DAG上每个点和多少个点间接连接,然后要让我们自己搞一个图,满足这个条件。
【解题方法】贪心水题。将顶点按能到达的点数从小到大排序,排好序之后每个点只能往前面的点连边. 因而如果存在一个排在第i位的点,要求到达的点数大于i-1,则不可行;否则就可以按照上述方法构造出图. 复杂度O(N^2).注意,这哥地方数字开小会TLE,队友把数组改成2010的才能过,不然TLE。。。可能姿势问题。
【AC 代码】
#include<cstdio>#include<algorithm>using namespace std;const int N =2100;struct node{ int id,x;}a[N];node ans[N*N];bool cmp(node a,node b){ return a.x<b.x;}int isok(int n){ for(int i=0;i<n;i++){ int t=a[i].x; for(int j=0;j<i;j++){ if(a[j].x==a[i].x) break; t--; } if(t>0) return 0; } return 1;}int main(){ int T,res=1,n; scanf("%d",&T); while(T--){ scanf("%d",&n); for(int i=0;i<n;i++){ scanf("%d",&a[i].x); a[i].id=i+1; } sort(a,a+n,cmp); if(!isok(n)) printf("Case #%d: No\n",res++); else{ int num=0; for(int i=0;i<n;i++){ int t=a[i].x; for(int j=0;j<i;j++){ if(a[j].x==a[i].x) break; if(t<=0) break; t--; ans[num++]={a[i].id,a[j].id}; } } if(num==0) printf("Case #%d: Yes\n",res++); else{ printf("Case #%d: Yes\n%d\n",res++,num); for(int i=0;i<num;i++) printf("%d %d\n",ans[i].id,ans[i].x); } } } return 0;}
0 0
- 多校联合训练7&&HDU5813
- 2016多校联合训练7&&HDU5818
- 多校联合训练7&&HDU 5810
- 2016多校联合训练7&&HDU5816
- hdu5813
- hdu5813
- 2013 多校联合训练一
- 2013多校联合训练第三场
- 2013多校联合训练第四场
- 2013多校联合训练第五场
- Delicious Apples(多校联合训练)
- 2015多校联合训练总结
- 2015多校联合训练总结(2)
- 多校联合训练第五场总结
- 多校联合训练4&&HDU 5763
- 多校联合训练4 &&5773
- 多校联合训练4&&HDU5775
- 多校联合训练5&&HDU5792
- 怎么用js对获取的date进行比较
- 文章标题 codeforces 701B:Cells Not Under Attack(水+set)
- android5.1 单次下滑直接切到quick setting
- (零)ArcGIS API For JavaScript3.17本地部署(Tomcat)
- 1110. Complete Binary Tree (25)
- 多校联合训练7&&HDU5813
- HDU1503(记录公共子序列)
- POJ2299——Ultra-QuickSort
- PHP假期复习(一)----编程入门
- 多重背包的两种解决方法(poj1276)
- 【随笔】
- 华为OJ——进制转换
- JFinal分页paginate
- LeetCode 152. Maximum Product Subarray