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

网站建设费能算作广告费用吗今天的新闻 联播最新消息

网站建设费能算作广告费用吗,今天的新闻 联播最新消息,公司内部网站建设奖励办法,下载别人做的ppt的网站题目大意 有一个有 n n n个点 n n n条边的无向连通图,一开始每条边都有一个颜色 c c c。 有 m m m次操作,每次操作将一条两个端点为 x , y x,y x,y的边的颜色修改为 c c c。求每次修改之后,图中有多少个颜色相同的连通块。 一个颜色相同的…

题目大意

有一个有 n n n个点 n n n条边的无向连通图,一开始每条边都有一个颜色 c c c

m m m次操作,每次操作将一条两个端点为 x , y x,y x,y的边的颜色修改为 c c c。求每次修改之后,图中有多少个颜色相同的连通块。

一个颜色相同的连通块指的是一个由一些相同颜色的边组成的连通块。

T T T组数据。

1 ≤ T ≤ 10 , 3 ≤ n , m ≤ 1 0 5 , 1 ≤ c ≤ n 1\leq T\leq 10,3\leq n,m\leq 10^5,1\leq c\leq n 1T10,3n,m105,1cn


题解

我们可以发现,这个图是一个基环树。

下面先考虑这个图是一棵树的情况。

我们考虑将一条边的修改看成给这条边删去颜色和给这条边加上颜色两个部分,那么一开始加边时处理边的颜色也可以看作给没有颜色的边加上颜色。

我们先考虑删去一条边的颜色对答案的贡献,设这条边的两个端点为 x , y x,y x,y,颜色为 c c c

  • 如果 x x x有另外一条颜色为 c c c的边, y y y也有,则删去这条边后,原本的这个连通块会变成两个连通块,答案加一
  • 如果 x x x有另外一条颜色为 c c c的边, y y y没有,则删去这条边后,原本的这个连通块会少一个点 x x x,答案不变
  • 如果 x x x没有另外一条颜色为 c c c的边, y y y有,则删去这条边后,原本的这个连通块会少一个点 y y y,答案不变
  • 如果 x x x没有另外一条颜色为 c c c的边, y y y也没有,则删去这条边后,这个只由 x x x y y y构成的连通块就没了,答案减一

再考虑加上一条边的颜色对答案的贡献,设这条边的两个端点为 x , y x,y x,y,颜色为 c c c

  • 如果 x x x有另外一条颜色为 c c c的边, y y y也有,则加上这条边后,原本的这两个连通块会变成一个连通块,答案减一
  • 如果 x x x有另外一条颜色为 c c c的边, y y y没有,则加上这条边后,原本的这个连通块会多一个点 y y y,答案不变
  • 如果 x x x没有另外一条颜色为 c c c的边, y y y有,则加上这条边后,原本的这个连通块会多一个点 x x x,答案不变
  • 如果 x x x没有另外一条颜色为 c c c的边, y y y也没有,则加上这条边后,就会构成一个只由 x x x y y y构成的连通块,答案加一

而当这个图是基环树的时候,有一些特殊情况需要特判:

  • 如果边在环上,且环上的边的颜色都是 c c c,则删去这条边后答案不变
  • 如果边在环上,且环上除了这条边之外的边的颜色都是 c c c,则加上这条边后答案不变

我们先找出环,然后按上面说的做就可以了。

注意在查找两个端点为 x , y x,y x,y的边的编号和每个点是否有每种颜色的边的时候,可以用 m a p map map来储存。

时间复杂度为 O ( n log ⁡ n ) O(n\log n) O(nlogn)

code

#include<bits/stdc++.h>
using namespace std;
const int N=100000;
int T,n,m,tot,d[2*N+5],l[2*N+5],r[N+5],c[N+5];
int ans,top,st[N+5],lp[N+5],dep[N+5],z[N+5],sum[N+5];
map<int,int>mp[N+5],hv[N+5];
struct node{int x,y,v;
}w[N+5];
void add(int xx,int yy){l[++tot]=r[xx];d[tot]=yy;r[xx]=tot;
}
void dfs(int u,int fa){dep[u]=dep[fa]+1;st[++top]=u;for(int i=r[u];i;i=l[i]){if(d[i]==fa) continue;if(dep[d[i]]&&dep[d[i]]<dep[u]){while(st[top]!=d[i]){lp[++lp[0]]=st[top];--top;}lp[++lp[0]]=d[i];}if(!dep[d[i]]) dfs(d[i],u);}if(st[top]==u) --top;
}
void pt(int x,int y,int v,int zt){int tmp=(hv[x][v]!=0)+(hv[y][v]!=0);++hv[x][v];++hv[y][v];if(zt) ++sum[v];if(zt&&sum[v]==lp[0]) --tmp;ans+=1-tmp;
}
void del(int x,int y,int v,int zt){--hv[x][v];--hv[y][v];int tmp=(hv[x][v]!=0)+(hv[y][v]!=0);if(zt&&sum[v]==lp[0]) --tmp;if(zt) --sum[v];ans-=1-tmp;
}
int main()
{freopen("tour.in","r",stdin);freopen("tour.out","w",stdout);scanf("%d",&T);while(T--){scanf("%d%d",&n,&m);tot=0;ans=0;for(int i=0;i<=N;i++){r[i]=dep[i]=z[i]=c[i]=sum[i]=0;mp[i].clear();hv[i].clear();}for(int i=1,x,y,v;i<=n;i++){scanf("%d%d%d",&x,&y,&v);w[i]=(node){x,y,v};add(x,y);add(y,x);mp[x][y]=mp[y][x]=i;}top=0;lp[0]=0;dfs(1,0);for(int i=1,x,y;i<=lp[0];i++){x=lp[i];y=lp[i%lp[0]+1];z[mp[x][y]]=1;}for(int i=1;i<=n;i++){pt(w[i].x,w[i].y,w[i].v,z[i]);c[i]=w[i].v;}for(int i=1,x,y,v,p;i<=m;i++){scanf("%d%d%d",&x,&y,&v);p=mp[x][y];del(x,y,c[p],z[p]);pt(x,y,v,z[p]);c[p]=v;printf("%d\n",ans);}}return 0;
}
http://www.shuangfujiaoyu.com/news/23509.html

相关文章:

  • 新网站推广方法优化服务内容
  • ps做网站logo尺寸关键词优化难度分析
  • 天津 企业网站建设自助建站的优势
  • 做境外旅游的网站网络营销网站有哪些
  • 做网站简约学校网站电脑软件推广平台
  • 网站建费用软文素材库
  • 做微信商城网站哪家好一站式网站建设公司
  • 临安做网站的公司有哪些灰色词快速上排名
  • 网站建设销售客户疑问网络营销的手段包括
  • 推荐做木工的视频网站如何推广好一个产品
  • 源创派网站建设泰州网站优化公司
  • 自己怎么在网上做网站友情链接查询友情链接检测
  • 怎么做门户网站设计方案个人免费网站创建入口
  • 做爰视频在线观看免费网站热点新闻事件今日最新
  • 河北石家庄最新消息今天百度seo优化及推广
  • 动态网站开发工程师网络营销与直播电商专升本
  • 网站制作设计多少钱国际购物网站平台有哪些
  • 长宁区网站建设网站想学手艺在哪里可以培训
  • 电子商务主要学什么课程长沙seo优化哪家好
  • 网站备案局seo教程技术
  • 江西城乡住房建设网站软文编辑器
  • 枣强网站建设公司百度收录快的发帖网站
  • 网站在工信部备案如何做百度推广app下载安卓版
  • 重庆石桥铺网站建设关键词首页排名优化
  • 太原加盟网站制作个人信息怎么在百度推广
  • 网站建设方案书 备案网络推广员工资多少钱
  • 四川网站排名安卓优化大师2021
  • 域名解析大全南京百度网站快速优化
  • 超值的镇江网站建设网站seo收录工具
  • 可做推广的网站怎样在百度上做免费推广