#include <bits/stdc++.h>
using namespace std;
const int maxn = 1e3 + 5;
int n, m, g, f, a, na, pa, paa, paar;
struct Node
{
int area; //区号
int id; //节点号
int cnt; //任务数
set<int> s;
friend bool operator<(const Node &a, const Node &b) //结构体排序
{
if (a.cnt != b.cnt)
return a.cnt > b.cnt;
else if (a.id != b.id)
return a.id > b.id;
}
} node[maxn];
priority_queue<Node> q; //按题目要求结构体排序后的优先队列存放符合要求的节点
set<int> b[maxn], c;
vector<int> ans[maxn];
void filter()
{
while (!q.empty())
{
q.pop();
}
c.clear();
if (na == 0)
{
if (pa == 0)
{
for (int i = 1; i <= m; i++)
{
c.insert(i);
}
}
else
{
for (int i = 1; i <= m; i++)
{
if (b[i].count(pa))
{
c.insert(i);
}
}
}
}
else
{
if (pa == 0)
{
c.insert(na);
}
else
{
if (b[na].count(pa))
{
c.insert(na);
}
}
}
for (int i = 1; i <= n; i++)
{
if (c.count(node[i].area) && !node[i].s.count(paa))
{
q.push(node[i]);
}
}
if (q.empty() && paa && !paar)
{
paa = 0;
filter();
}
}
int main()
{
cin >> n >> m;
for (int i = 1; i <= n; i++)
{
int x;
cin >> x;
node[i].area = x;
node[i].id = i;
}
cin >> g;
for (int i = 1; i <= g; i++)
{
cin >> f >> a >> na >> pa >> paa >> paar;
for (int j = 1; j <= f; j++)
{
filter();
if (q.empty())
{
ans[i].push_back(0);
}
else
{
ans[i].push_back(q.top().id);
node[q.top().id].s.insert(a);
node[q.top().id].cnt++;
b[q.top().area].insert(a);
}
}
}
for (int i = 1; i <= g; i++)
{
for (int j = 0; j < ans[i].size(); j++)
{
cout << ans[i][j];
if (j != ans[i].size() - 1)
{
cout << " ";
}
else
{
cout << "\n";
}
}
}
}
CSP资源调度器
最新推荐文章于 2024-03-23 09:17:11 发布