CF 274D Lovely Matrix(拓撲排序)
轉載請註明出處,謝謝http://blog.csdn.net/ACM_cxlove?viewmode=contents by---cxlove
題目:給出一個n*m的矩陣,問是否 能改變列的順序,使得每一行都非遞減(其中-1表示可以作為任何一個數)
由於範圍比較大,雖然是比較明顯的拓撲排序,但是建圖比較麻煩
不可能兩兩比較然後建圖,而且可能出現大量的相同的數字
做法是加入冗餘結點,對於每一行我們來建圖,排序之後,對於相同的一系列加入一個冗餘結點,通過冗餘結點來指向關係
#include<iostream>
#include<cstdio>
#include<map>
#include<cstring>
#include<cmath>
#include<vector>
#include<algorithm>
#include<set>
#include<string>
#include<queue>
#define inf 1000000005
#define M 40
#define N 100005
#define maxn 300005
#define eps 1e-8
#define zero(a) fabs(a)<eps
#define Min(a,b) ((a)<(b)?(a):(b))
#define Max(a,b) ((a)>(b)?(a):(b))
#define pb(a) push_back(a)
#define mp(a,b) make_pair(a,b)
#define mem(a,b) memset(a,b,sizeof(a))
#define LL long long
#define MOD 1000000007
#define lson step<<1
#define rson step<<1|1
#define sqr(a) ((a)*(a))
#define Key_value ch[ch[root][1]][0]
#define test puts("OK");
#define pi acos(-1.0)
#define lowbit(x) ((-(x))&(x))
#define HASH1 1331
#define HASH2 10001
#pragma comment(linker, "/STACK:1024000000,1024000000")
using namespace std;
struct Node{
int val,idx;
bool operator<(const Node n)const{
return val<n.val;
}
}a[N];
int n,m,in[N*2],cnt;
vector<int>edge[N*2];
queue<int>que;
void add(int u,int v){
in[v]++;
edge[u].pb(v);
}
int main(){
cin>>n>>m;
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
scanf("%d",&a[j].val);
a[j].idx=j;
}
sort(a,a+m);
for(int j=0;j<m;j++){
if(a[j].val==-1) continue;
if(!j||a[j].val!=a[j-1].val) cnt++;
add(a[j].idx,m+cnt+1); //本身指向比自己大的
add(m+cnt,a[j].idx); //比自己小的指向自己
}
cnt++;
}
for(int i=0;i<m+cnt;i++)
if(!in[i])
que.push(i);
int ans[N],tot=0;
while(!que.empty()){
int u=que.front();que.pop();
if(u<m)
ans[tot++]=u;
for(int i=0;i<edge[u].size();i++){
int v=edge[u][i];
in[v]--;
if(!in[v])
que.push(v);
}
}
if(tot<m) puts("-1");
else{
for(int i=0;i<m;i++)
cout<<ans[i]+1<<(i==m-1?"\n":" ");
}
return 0;
}
相關文章
- (set+拓撲排序) CF1572A Book排序
- 拓撲排序排序
- 拓撲排序,YYDS排序
- 筆記:拓撲排序筆記排序
- 拓撲排序小結排序
- 圖論——拓撲排序圖論排序
- 【筆記/模板】拓撲排序筆記排序
- DFS實現拓撲排序排序
- AOV網與拓撲排序排序
- Reward (圖論+拓撲排序)圖論排序
- 拓撲排序就這麼回事排序
- 演算法-圖論-拓撲排序演算法圖論排序
- 有向圖的拓撲排序——DFS排序
- 圖解拓撲排序+程式碼實現圖解排序
- 拓撲排序 (BFS )DAG (有向無環圖)排序
- 圖的拓撲排序詳解與實現排序
- 【Tarjan 拓撲排序 dp】P3387 【模板】縮點排序
- VOL.2 拓撲排序與關鍵路徑排序
- 拓撲排序詳解(梅開二度之dfs版按字典序輸出拓撲路徑+dfs版輸出全部拓撲路徑排序
- Noc拓撲
- 牛客 51011 可達性統計(拓撲排序,bitset)排序
- 洛谷P3953 逛公園(dp 拓撲排序)排序
- 【BZOJ-1565】植物大戰殭屍 拓撲排序 + 最小割排序
- CF1493F Enchanted Matrix
- Day2 尤拉路,拓撲排序和差分約束排序
- Leetcode 1691. 堆疊長方體的最大高度(拓撲排序 + DP)LeetCode排序
- 網路拓撲結構
- StratoVirt 的 vCPU 拓撲(SMP)
- BZOJ2535: [Noi2010]Plane 航空管制2(拓撲排序 貪心)排序
- Android程式設計師會遇到的演算法(part 7 拓撲排序)Android程式設計師演算法排序
- 網路拓撲圖:網路拓撲圖介紹及線上製作
- 演算法資料結構 | 圖論基礎演算法——拓撲排序演算法資料結構圖論排序
- 藍橋杯 卡勒沃夫之弱水路三千(提高型) 拓撲排序+Map排序
- 樹的拓撲序計數
- 拓撲序的三種功能
- tidb拓撲查詢工具qtidbTiDBQT
- Istio全景監控與拓撲
- 拓撲AC NOIP模擬賽2
- 網路拓撲—FTP服務搭建FTP