2016京胜杯-吃在工大
来源:互联网 发布:kali 445端口入侵 编辑:程序博客网 时间:2024/04/30 00:31
题目描述
JH和他的好朋友YZ两名程序员回访母校合工大,准备在这住一段日子,都说“玩在安大,吃在工大”,JH又是一名典型吃货,于是决定在工大食堂好好吃一段日子,但是,面对美食诱惑:黄焖鸡、风暴干锅、麻辣香锅、奥尔良烤翅…由于时间有限,JH不知道哪顿饭吃哪个菜好。 于是YZ为了帮助他解决这个问题,也顺便考考他,给他出了一个问题:“黄焖鸡必须在干锅花菜前面吃,干锅牛肉必须在干锅鱿鱼前面吃….你按这个要求下,就知道吃的顺序啦”。JH抓抓头,分分钟写了个程序搞定,现在,让你来写写看?输出一组JH符合条件下吃的食物的序列。 假设JH每顿只吃一种食物,且每顿吃的都不同,食物编号1到N。
输入
先输入一个整数T,表示T(T < 50)组数据。 每组数据第一行输出一个整数,N,M,分别表示有N种食物,总共有M个约束条件,接下来M行每行输入两个正整数a,b( n > = a > 0,n > = b > 0),表示食物a必须在食物b之前吃。
输出
各组数据输出答案占一行,输出一组符合条件的序列(要求输出字典序最大的那一组),如果答案不存在,输出“-1”。
样例输入
1
4 3
1 2
2 3
4 3
样例输出
4 1 2 3
思路
此题主要运用拓扑排序
- 首先读取数据,存入一个图中,同时记录每个节点的入度;
- 然后再将入度为0的节点加入都优先队列中;
- 取优先队列的队首元素,并将此元素存到数组result中,然后依次遍历此节点的邻接点,同时将邻接点的入度减1,并将邻接点中入度为0的加入到优先队列中;
- 重复步骤三,直到队列为空;
code
#include <iostream>#include <queue>#include <cstring>#include <fstream>using namespace std;int G[1005][1005];bool vis[1005];int n, m;bool isStart(int k){ for(int i = 0; i <= n; i ++) { if(G[i][k]) { return false; } } return true;}bool hasHoop(){ for(int i = 1; i <= n; i ++) { if(!vis[i]) { return true; } } return false;} void Do(){ priority_queue<int> pq; int loc = 0; int ans[1005]; for(int i = 1; i <= n; i++) { if(isStart(i)) { pq.push(i); } } while(!pq.empty()) { //cout << "11" << endl; int k = pq.top(); pq.pop(); if(vis[k]) { continue; } ans[loc++] = k; vis[k] = true; for(int i = 1; i <= n; ++ i) { G[k][i] = 0; if(isStart(i)) { pq.push(i); } } } if(hasHoop()) { cout << "-1" << endl; } else { for(int i = 0; i < n; i ++) { if(i) { cout << " "; } cout << ans[i]; } cout << endl; }}int main(){ std::ios::sync_with_stdio(false); std::cin.tie(0); //ifstream cin("data.in"); int T; cin >> T; while(T --) { cin >> n >> m; memset(G, 0, sizeof(G)); memset(vis, false, sizeof(vis)); for(int i = 0; i < m; i ++) { int a, b; cin >> a >> b; G[a][b] = 1; } Do(); } return 0;}
0 0
- 2016京胜杯-吃在工大
- 吃在工大
- 安徽省2016“京胜杯”程序设计大赛_F_吃在工大
- 吃在深圳
- 吃在西安
- 吃在大连
- 吃在海底捞
- 吃在北京
- 吃了个大西瓜
- 吃在深圳+东西冲
- 吃鸡蛋的三大饮食禁忌
- 有关“吃”的十大健康杀手
- 吃蔬菜的十大误区
- 吃花生5大绝妙益处
- 说在端午,吃在端午
- 吃!
- 吃
- 去年这个时候的凌晨和上大好友李睿还在杭州吃外面的夜排挡呢,那次两天一夜的二人行还挺有意思的
- 统一会话
- php单例模式
- hdu 1285 拓扑排序
- 服务器开发之图形验证码
- Windows程序内部运行原理
- 2016京胜杯-吃在工大
- Instance Segmentation Semantic Segmentation
- com.android.builder.packaging.DuplicateFileException: Duplicate files copied in APK META-INF/LICENSE
- vim的一些常见用法
- poj1155 TELE(树形+背包dp)
- 用pandas绘制箱体图(boxplot)
- POJ 3926 Parade
- php-fpm 和 nginx 网络模型差别
- LightOJ-1031-区间dp,dfs