中文亚洲精品无码_熟女乱子伦免费_人人超碰人人爱国产_亚洲熟妇女综合网

當(dāng)前位置: 首頁 > news >正文

谷歌優(yōu)化軟件廊坊seo推廣

谷歌優(yōu)化軟件,廊坊seo推廣,廉江新聞最新消息,邢臺住房與城鄉(xiāng)建設(shè)部網(wǎng)站小 A 旅行到了遠(yuǎn)方的一座城市,其內(nèi)部的道路可以被視為一張包含恰好 n n n 個點以及 n n n 條邊的無向連通圖。這里的居民可以用一種特質(zhì)的墨水來改變圖中某一條邊的顏色。 居民們的狂歡節(jié)即將開始了,且節(jié)日會持續(xù) m m m 天。每一天,居民們…

小 A 旅行到了遠(yuǎn)方的一座城市,其內(nèi)部的道路可以被視為一張包含恰好 n n n 個點以及 n n n 條邊的無向連通圖。這里的居民可以用一種特質(zhì)的墨水來改變圖中某一條邊的顏色。

居民們的狂歡節(jié)即將開始了,且節(jié)日會持續(xù) m m m 天。每一天,居民們會選擇圖中的一條邊,并用某一種顏色的墨水去覆蓋這條邊原有的顏色。在每一天的最后,他們都想知道當(dāng)前的城市包含多少個顏色相同的連通塊。

特別的,一個顏色相同的連通塊指的是一個由一些相同顏色的邊組成的連通塊。

多組數(shù)據(jù) T ≤ 10 T\le10 T10
n , m ≤ 1 0 5 n,m\le10^5 n,m105


首先這個圖是基環(huán)樹。

可以用各種方法求出一開始顏色相同連通塊的個數(shù)。我使用并查集。

對于每次詢問,改變這條邊的顏色,貢獻(xiàn)只需看兩個點的連邊情況。

可以分成兩部分考慮,先去掉這條邊的顏色,再加上修改的顏色。

前一個操作,如果兩邊都有這種顏色,那么斷掉這條邊會增加一個連通塊;如果兩邊都沒有,就會減少一個;否則不變。

后一個操作,如果兩邊都有這種顏色,那么斷掉這條邊會減少一個連通塊;如果兩邊都沒有,就會增加一個;否則不變。

但是如果兩邊的顏色是同一個連通塊,那么就不會增加連通塊,這種情況只能是環(huán)上的邊全是一種顏色(在后種情況就是除了當(dāng)前邊全是一種顏色),特判即可。

實現(xiàn)上可以開 n n n 個 map 維護(hù)當(dāng)前點的出邊顏色。

時間復(fù)雜度 O ( T n log ? n ) O(Tn\log n) O(Tnlogn)

代碼如下

#include<bits/stdc++.h>
using namespace std;
const int N=2e5+1;
int n,m,fa[N],bj[N],dfn[N],low[N],num,vis[N],VIS[N];
stack<int> s;
vector<int> ans;
map<int,int> ma[N],ring;
map<pair<int,int>,int> To;
struct Node
{int v,w,id;Node(){}Node(int a,int b,int c){v=a,w=b,id=c;}
};
vector<Node> v[N];
struct node
{int u,v,w;bool operator==(const node &a)const{return u==a.u&&v==a.v&&w==a.w;}
}a[N];
int find(int x)
{return x==fa[x]?x:fa[x]=find(fa[x]);
}
void add(int x,int y)
{int a=find(x),b=find(y);if(a!=b) fa[a]=b;
}
void dfs(int u,int fa)
{dfn[u]=low[u]=++num;s.push(u);for(auto i:v[u]){if(!dfn[i.v]){dfs(i.v,u);low[u]=min(low[u],low[i.v]);if(low[i.v]>=dfn[u]){vector<int> aa;int x=0;do{x=s.top();s.pop();aa.push_back(x);}while(x!=i.v);aa.push_back(u);if(aa.size()>2) ans=aa;}}else if(i.v!=fa) low[u]=min(low[u],dfn[i.v]);}
}
void Dfs(int u,int fa)
{if(VIS[u]) return;VIS[u]=1;for(auto i:v[u]) if(i.v!=fa&&vis[i.v]) ring[i.w]++,Dfs(i.v,u);
}
int main()
{freopen("tour.in","r",stdin);freopen("tour.out","w",stdout);int t;cin>>t;while(t--){memset(VIS,0,sizeof(VIS));memset(vis,0,sizeof(vis));memset(dfn,0,sizeof(dfn));memset(low,0,sizeof(low));num=0;while(s.size()) s.pop();To.clear();ans.clear();ring.clear();scanf("%d%d",&n,&m);for(int i=1;i<=n;i++) fa[i]=i;for(int i=1,x,y,w;i<=n;i++){scanf("%d%d%d",&a[i].u,&a[i].v,&a[i].w);if(a[i].u>a[i].v) swap(a[i].u,a[i].v);v[a[i].u].push_back(Node(a[i].v,a[i].w,i));v[a[i].v].push_back(Node(a[i].u,a[i].w,i));ma[a[i].u][a[i].w]++;ma[a[i].v][a[i].w]++;To[make_pair(a[i].u,a[i].v)]=i;}dfs(1,0);for(auto i:ans) vis[i]=1;if(ans.size()) for(auto i:v[ans.front()]) if(vis[i.v]){Dfs(ans.front(),i.v);break;}for(int i=1;i<=n;i++){for(auto j:v[a[i].u]){if(j.v==a[i].v) continue;if(j.w==a[i].w) add(i,j.id);}for(auto j:v[a[i].v]){if(j.v==a[i].u) continue;if(j.w==a[i].w) add(i,j.id);}}for(int i=1;i<=n;i++) bj[i]=find(i);sort(bj+1,bj+1+n);int num=unique(bj+1,bj+1+n)-bj-1;for(int i=1,x,y,w;i<=m;i++){scanf("%d%d%d",&x,&y,&w);if(x>y) swap(x,y);int id=To[make_pair(x,y)];int fl1=0,fl2=0;ma[a[id].u][a[id].w]--;ma[a[id].v][a[id].w]--;fl1=ma[a[id].u][a[id].w];fl2=ma[a[id].v][a[id].w];ma[a[id].u][a[id].w]++;ma[a[id].v][a[id].w]++;if(fl1&&fl2&&(!vis[a[id].u]||!vis[a[id].v]||ring.size()>1)) num++;else if(!fl1&&!fl2) num--;ma[a[id].u][a[id].w]--;ma[a[id].v][a[id].w]--;if(vis[a[id].u]&&vis[a[id].v]) ring[a[id].w]--;if(!ring.count(a[id].w)) ring.erase(a[id].w);if(!ma[a[id].u][a[id].w]) ma[a[id].u].erase(a[id].w);if(!ma[a[id].v][a[id].w]) ma[a[id].v].erase(a[id].w);a[id].w=w;ma[a[id].u][a[id].w]++;ma[a[id].v][a[id].w]++;if(vis[a[id].u]&&vis[a[id].v]) ring[a[id].w]++;fl1=0,fl2=0;ma[a[id].u][a[id].w]--;ma[a[id].v][a[id].w]--;fl1=ma[a[id].u][a[id].w];fl2=ma[a[id].v][a[id].w];ma[a[id].u][a[id].w]++;ma[a[id].v][a[id].w]++;if(vis[a[id].u]&&vis[a[id].v]){ring[a[id].w]--;if(!ring.count(a[id].w)) ring.erase(a[id].w);}if(fl1&&fl2&&(!vis[a[id].u]||!vis[a[id].v]||ring.size()>1)) num--;else if(!fl1&&!fl2) num++;if(vis[a[id].u]&&vis[a[id].v]) ring[a[id].w]++;printf("%d\n",num);}for(int i=1;i<=n;i++) v[i].clear(),ma[i].clear();}
}
http://www.risenshineclean.com/news/9530.html

相關(guān)文章:

  • 網(wǎng)站開發(fā)與設(shè)計結(jié)課大作業(yè)搜索引擎優(yōu)化的步驟
  • 科技傳承安卓優(yōu)化大師歷史版本
  • 外加工訂單網(wǎng)優(yōu)化大師會員兌換碼
  • 鄭州一網(wǎng)網(wǎng)站建設(shè)新聞稿件代發(fā)平臺
  • 怎么選擇鎮(zhèn)江網(wǎng)站建設(shè)廈門網(wǎng)站制作
  • 深圳做網(wǎng)站的公司windows7優(yōu)化大師官方下載
  • wordpress必裝的插件焦作網(wǎng)站seo
  • 如何進(jìn)行企業(yè)營銷型網(wǎng)站建設(shè)百度商家入駐怎么做
  • 用網(wǎng)站做CAN總線通信好嗎上海網(wǎng)絡(luò)seo優(yōu)化公司
  • app開發(fā)方案seo網(wǎng)頁的基礎(chǔ)知識
  • 網(wǎng)站開發(fā)軟件 論文 摘要簡單網(wǎng)頁制作成品免費(fèi)
  • 做支付網(wǎng)站東莞seo推廣公司
  • 西安優(yōu)惠電商平臺網(wǎng)站今日國內(nèi)新聞頭條大事
  • 哪個網(wǎng)站的課件做的好處營銷技巧有哪些
  • 北京企業(yè)網(wǎng)站備案免費(fèi)seo推廣軟件
  • 千里做他千百度網(wǎng)站2023年適合小學(xué)生的新聞
  • 怎樣接做網(wǎng)站的活電商代運(yùn)營公司十強(qiáng)
  • 網(wǎng)站維護(hù)多少錢一個月泉州百度推廣咨詢
  • 網(wǎng)站備案怎么那么麻煩深圳百度推廣聯(lián)系方式
  • 個人可以做幾個網(wǎng)站嗎廊坊網(wǎng)站seo
  • 多個域名 指向同一個網(wǎng)站網(wǎng)站搭建費(fèi)用
  • 一次備案多個網(wǎng)站網(wǎng)絡(luò)營銷戰(zhàn)略的內(nèi)容
  • 哪個網(wǎng)站可以做公務(wù)員題軟文營銷方法有哪些
  • 網(wǎng)站開發(fā)過程的基本環(huán)節(jié)杭州seo顧問
  • 網(wǎng)站建設(shè)與管理管理課程青島seo關(guān)鍵詞排名
  • 免費(fèi)完整版的網(wǎng)站模板做百度推廣代運(yùn)營有用嗎
  • 資訊門戶網(wǎng)站怎么做個人免費(fèi)推廣網(wǎng)站
  • 萊蕪網(wǎng)站網(wǎng)站廣告調(diào)詞平臺
  • 深圳網(wǎng)站制作服濰坊在線制作網(wǎng)站
  • 焦作專業(yè)做網(wǎng)站公司百度競價平臺官網(wǎng)