当前位置: 首页 > wzjs >正文

企业网站的设计要点上海网站设计团队

企业网站的设计要点,上海网站设计团队,咸宁网站设计公司,佛山市城市建设档案馆网站题目大意 给你一个n*m的矩阵,其中-1代表可以填入任意非负数 求是否能够通过调换列的顺序,使得每一行变为非递减数列 如果可以,输出调换列的顺序 否则输出-1 思路 可以把每一列看成一个点,那么其实就是把m个点进行排序&#xff…

在这里插入图片描述
在这里插入图片描述

题目大意

给你一个n*m的矩阵,其中-1代表可以填入任意非负数
求是否能够通过调换列的顺序,使得每一行变为非递减数列
如果可以,输出调换列的顺序
否则输出-1

思路

可以把每一列看成一个点,那么其实就是把m个点进行排序,使得其满足题目的要求

可以想到使用拓扑排序,拓扑排序的本质是处理有向无环图中的偏序关系,即找到一个线性顺序,使得所有边的约束都被满足,在本题中:每个列是图中的一个节点。每一行的非 -1 元素会生成一系列约束(如列 x 必须在列 y 之前),这些约束作为有向边 x→y 加入图中。
所有行的约束被合并到同一个图中。若图中存在环(如 x→y 和 y→x 同时存在),则无解;否则拓扑排序的结果即为满足所有行约束的列顺序。

对于每一行的x<y的元素,添加一条从x指向y的一条边,但是这样如果有很多重复的数,建边的代价非常大,假设有n个x和m个y,x<y,那么就会建出n*m条边,再加上最外面的n行总复杂度会变成立方级
所以对于相同的数,我们要进行优化,使其变成线性的一条,
这里考虑到使用虚拟节点t,当遇到相同节点x时,通过t指向x节点,x节点指向t+1节点的方式将其变为一条链

使用pair 来存储每个点,first存值,second存位置,然后进行sort刚好能将数组按从小到大的顺序排列,然后在edge数组存位置与位置之间的关系,最后调用拓扑排序得到对应的答案

// Author: zengyz
// 2025-06-13 18:02#include <bits/stdc++.h>using namespace std;
using i64 = long long;
const int N = 1e5 + 10;
pair<int, int> p[N];
// int a[N], p[N];
vector<int> edge[N * 3], ans;
int n, m;
int cnt[N * 3];
queue<int> q;
bool TopSort(int n)
{for (int i = 1; i <= n; i++)if (cnt[i] == 0)q.push(i);for (int i = 1; i <= n; i++){if (q.size() == 0)return 0;int idx = q.front();q.pop();ans.push_back(idx);for (int j = 0; j < edge[idx].size(); j++)if ((--cnt[edge[idx][j]]) == 0)q.push(edge[idx][j]);}return 1;
}
void solve()
{cin >> n >> m;int t = m + 1;for (int i = 1; i <= n; i++){t++;for (int j = 1; j <= m; j++)cin >> p[j].first, p[j].second = j;sort(p + 1, p + 1 + m);int k = 1;while (p[k].first == -1)k++;while (k <= m){int j = k;while (j <= m && p[j].first == p[k].first){edge[t].push_back(p[j].second), cnt[p[j].second]++;edge[p[j++].second].push_back(t + 1), cnt[t + 1]++;}k = j;t++;}}if (TopSort(t) == 0)cout << -1 << endl;elsefor (int i = 0; i < ans.size(); i++){if (ans[i] <= m)cout << ans[i] << " ";}return;
}int main()
{ios::sync_with_stdio(0);cin.tie(0), cout.tie(0);int _T = 1;// cin >> _T;while (_T--){solve();}return 0;
}

文章转载自:

http://gk0rr31B.xywfz.cn
http://WTrUOm8V.xywfz.cn
http://COx8lSkB.xywfz.cn
http://R8zqm3X4.xywfz.cn
http://A6zRehdE.xywfz.cn
http://pp1qDKeJ.xywfz.cn
http://6guXVx2u.xywfz.cn
http://cvSM0p90.xywfz.cn
http://fb9fcoC1.xywfz.cn
http://B6nXU7uR.xywfz.cn
http://y0bZcW7y.xywfz.cn
http://YAkPtivi.xywfz.cn
http://iEeWF26o.xywfz.cn
http://QAQVpTYQ.xywfz.cn
http://53KYMQzf.xywfz.cn
http://3HRsHJ0P.xywfz.cn
http://uT8o1ZnA.xywfz.cn
http://3B1QGVOw.xywfz.cn
http://opIk3Wyd.xywfz.cn
http://1FSJUAdY.xywfz.cn
http://bZFYWvSh.xywfz.cn
http://tfH2VLhn.xywfz.cn
http://OA4cAxzF.xywfz.cn
http://RpMMhJLQ.xywfz.cn
http://l7kx8c56.xywfz.cn
http://ITaFpjRF.xywfz.cn
http://8lWQDxNy.xywfz.cn
http://Cpe6KroB.xywfz.cn
http://M3mnNIeV.xywfz.cn
http://mSg4s3BR.xywfz.cn
http://www.dtcms.com/wzjs/618275.html

相关文章:

  • 网站部署步骤网站开发建设网站培训学校
  • 手机字体下载大全免费网站怎么制作游戏app软件
  • html做网站步骤大全搜索引擎优化工作主要做好哪些方面
  • 网站添加百度地图导航seo快排软件
  • 上杭网站设计公司杨浦网站建设 网站外包
  • 各省住房和城乡建设厅网站使用django建设一个网站
  • 网站后台管理系统源码下载wordpress付费观看
  • 网站建设硬件要求app网站开发河 又
  • 如何做网站联盟营销steam课程做网站
  • 如何对自己做的php网站加密活动营销
  • 别人公司网站进不去wordpress个人
  • 湛江专业网站建设公司长沙建设工程官方网站
  • 莱芜网站优化有哪些免费域名怎么注册
  • 中国外协加工网免费wordpress建站seo好做吗
  • 企业免费网站模板谷歌推广
  • 图书网站建设源码wordpress和python
  • 松江团购做网站网站的题目
  • 湘潭网站建设是什么制造做网站
  • 抓取网站访客qq号码手机导航网站模板
  • 做面包有哪些网站知乎基于wap的企业网站设计与实现
  • 网站建设中网站图片如何修改免费制作宣传册的app
  • 做网站需求文档有必要 在线 网页 代理
  • 龙岗建站费用iis7.5添加网站
  • 建设机械网站机构国外在线设计平台
  • icp备案需要先建设网站么网页美工是什么
  • 企业介绍微网站怎么做的网站界面设计的发展趋势
  • 爱用建站官网营销网站建设公司推荐
  • 可信网站认证 费用提高网站订单转化率
  • 兰州网站建设推荐q479185700顶上wix和wordpress区别
  • 怎么邀约客户做网站北京专业网络直播制作