HDU5348 MZL's endless loop (搜尋)
題目連結: 傳送門
題意:
給定一個無向圖,讓你給每個邊加上方向使得每個點的|入度-出度|的絕對值小於等於1.
思路:
對於一個頂點我們每次尋找與他相連的一條鏈,如果當前個點的入度小於出度則我們將這條鏈的
方向設為使入度增加的放向。相反則設為使出度增加的放向。寫的時候遍歷過的邊就不要再走了
因此需要刪邊。
Ps.比賽的時候YY感覺不可能有-1的情況但是沒法證明,具體的證明請看:傳送門
程式碼如下:
#include <iostream>
#include <cstring>
#include <algorithm>
#include <cstdio>
using namespace std;
const int maxn = 1e5+10;
int head[maxn],in[maxn],out[maxn],tot[maxn];
bool vis[maxn*6];
struct nod {
int to,next;
} edge[6*maxn];
int n,m,ip;
int ans[maxn*6];
void init(){
ip=0;
memset(head,-1,sizeof(head));
memset(vis,0,sizeof(vis));
memset(in,0,sizeof(in));
memset(out,0,sizeof(out));
memset(tot,0,sizeof(tot));
}
void add(int u,int v) {
edge[ip].to = v ;
edge[ip].next = head[u] ;
head[u] = ip++ ;
}
void dfs_in(int u) {
for(int i=head[u]; i!=-1; i=edge[i].next) {
if(vis[i]) {
head[u]=edge[i].next;
continue;
}
int v=edge[i].to;
if(u!=v && out[v]>in[v]) continue;
vis[i]=1,vis[i^1]=1; //標記,刪邊
head[u] = edge[i].next;
in[u]++,out[v]++;
if(i%2) ans[i/2] = 1;
else ans[i/2] = 0;
dfs_in(v);
return;
}
}
void dfs_out(int u) {
for(int i=head[u]; i!=-1; i=edge[i].next) {
if(vis[i]) {
head[u]=edge[i].next;
continue;
}
int v=edge[i].to;
if(u!=v && in[v]>out[v]) continue;
vis[i]=1,vis[i^1]=1; //標記,刪邊
head[u] = edge[i].next;
in[v]++,out[u]++;
if(i%2) ans[i/2] = 0;
else ans[i/2] = 1;
dfs_out(v);
return ;
}
}
int main() {
int t;
scanf("%d",&t);
while(t--) {
init();
scanf("%d%d",&n,&m);
for(int i=0; i<m; i++) {
int u,v;
scanf("%d%d",&u,&v);
add(u,v),add(v,u);
tot[u]++,tot[v]++;
}
memset(vis,0,sizeof(vis));
for(int i=1; i<=n; i++) {
while(out[i]+in[i]<tot[i]) {
if(out[i]>in[i]) dfs_in(i);
else dfs_out(i);
}
}
for(int i=0;i<m;i++)
printf("%d\n",ans[i]);
}
return 0;
}
相關文章
- 啟發式搜尋的方式(深度優先,廣度優先)和 搜尋方法(Dijkstra‘s演算法,代價一致搜尋,貪心搜尋 ,A星搜尋)演算法
- 海量資料搜尋---搜尋引擎
- 搜尋引擎-03-搜尋引擎原理
- 搜尋引擎es-分詞與搜尋分詞
- elasticsearch搜尋Elasticsearch
- 字串搜尋字串
- vim搜尋
- 搜尋策略
- Elasticsearch(ES)的高階搜尋(DSL搜尋)(上篇)Elasticsearch
- Elasticsearch(ES)的高階搜尋(DSL搜尋)(下篇)Elasticsearch
- 谷歌搜尋用上BERT,10%搜尋結果將改善谷歌
- 直播開發app,實時搜尋、搜尋引擎框APP
- 泛企業搜尋PK網際網路搜尋
- Elasticsearch——全文搜尋Elasticsearch
- Elasticsearch 向量搜尋Elasticsearch
- elasticsearch搜尋商品Elasticsearch
- Elasticsearch常用搜尋Elasticsearch
- jQuery 模糊搜尋jQuery
- Google搜尋大法Go
- Google搜尋API?GoAPI
- Google搜尋技巧Go
- 搜尋/查詢
- 搜尋插入位置
- SAP S/4HANA Material Fiori應用的搜尋實現原理
- Nebula 基於 ElasticSearch 的全文搜尋引擎的文字搜尋Elasticsearch
- Python之 常用查詢演算法:最小項搜尋、順序搜尋、二分搜尋Python演算法
- 直播系統程式碼,常用搜尋中搜尋歷史,搜尋推薦功能
- 尋路之 A* 搜尋演算法演算法
- [每天get點新技能]搜商——你不知道的搜尋概念:元搜尋
- S/4HANA for Customer Management裡的搜尋分頁處理
- 使用Google百度等搜尋引擎的常用搜尋技巧Go
- 雲搜尋服務在APP搜尋場景的應用APP
- Mac上神奇的內建搜尋引擎——Spotlight(聚焦搜尋)Mac
- MacOS的Safari搜尋欄無法搜尋怎麼解決?Mac
- 直播平臺開發,基礎搜尋方式之拼音搜尋
- ElasticSearch全文搜尋引擎Elasticsearch
- Laravel xunsearch 全文搜尋Laravel
- elasticsearch之拼音搜尋Elasticsearch