• P3366 【模板】最小生成树
  • P4180 [BJWC2010]严格次小生成树
  • P2872 [USACO07DEC]Building Roads S
  • P1991 无线通讯网
  • P1967 货车运输
  • P4047 [JSOI2010]部落划分
  • P1113 杂务
  • P1983 车站分级
  • P1038 神经网络
  • P5960 【模板】差分约束算法
  • P3275 [SCOI2011]糖果
  • P2294 [HNOI2005]狡猾的商人
  • P4926 [1007]倍杀测量者
  • P5590 赛车游戏

1.P3366 【模板】最小生成树

kruskal

#include<bits/stdc++.h>
using namespace std;
int n,m,a[5005],ans,cnt;
inline int read()
{int x=0,f=1;char c=getchar();while(c<'0'||c>'9'){if(c=='-') f=-1;c=getchar();}while(c>='0'&&c<='9') x=(x<<3)+(x<<1)+(c^48),c=getchar();return x*f;
}
struct edge{int u,v,w;
}e[200005];
int find(int x){if(a[x]==x)return x;return a[x]=find(a[x]);
}
void hb(int y,int x){a[find(y)]=find(x);return;
}
bool cmp(edge a,edge b){return a.w<b.w;
}
void krus(){sort(e+1,e+1+m,cmp);for(int i=1;i<=m;i++){int u,v;u=e[i].u;v=e[i].v;if(find(u)==find(v))continue;ans+=e[i].w;hb(u,v);if(++cnt==n-1)break;}
}
int main(){n=read(),m=read();for(int i=1;i<=n;i++){a[i]=i;}for(int i=1;i<=m;i++){e[i].u=read();e[i].v=read();e[i].w=read();} krus();cout<<ans;return 0;
}

prim

#include<cstdio>
#include<queue>
#include<cstring>
#include<algorithm>
#define R register int
using namespace std;int k,n,m,cnt,sum,ai,bi,ci,head[5005],dis[5005],vis[5005];struct Edge
{int v,w,next;
}e[400005];void add(int u,int v,int w)
{e[++k].v=v;e[k].w=w;e[k].next=head[u];head[u]=k;
}typedef pair <int,int> pii;
priority_queue <pii,vector<pii>,greater<pii> > q;void prim()
{dis[1]=0;q.push(make_pair(0,1));while(!q.empty()&&cnt<n){int d=q.top().first,u=q.top().second;q.pop();if(vis[u]) continue;cnt++;sum+=d;vis[u]=1;for(R i=head[u];i!=-1;i=e[i].next)if(e[i].w<dis[e[i].v])dis[e[i].v]=e[i].w,q.push(make_pair(dis[e[i].v],e[i].v));}
}int main()
{memset(dis,127,sizeof(dis));memset(head,-1,sizeof(head));scanf("%d%d",&n,&m);for(R i=1;i<=m;i++){scanf("%d%d%d",&ai,&bi,&ci);add(ai,bi,ci);add(bi,ai,ci);}prim();if (cnt==n)printf("%d",sum);else printf("orz");
}

2.P4180 [BJWC2010]严格次小生成树

咕咕咕了

3.P2872 [USACO07DEC]Building Roads S

#include<bits/stdc++.h>
using namespace std;
int n,m,a[5005],cnt,bs=1,qq;
int dis[1005][1005];
double ans;
inline int read()
{int x=0,f=1;char c=getchar();while(c<'0'||c>'9'){if(c=='-') f=-1;c=getchar();}while(c>='0'&&c<='9') x=(x<<3)+(x<<1)+(c^48),c=getchar();return x*f;
}
struct edge{int u,v;double w;
}e[1000005];
struct node{double x,y;
}pos[1000005];
int find(int x){if(a[x]==x)return x;return a[x]=find(a[x]);
}
void hb(int y,int x){a[find(y)]=find(x);return;
}
bool cmp(edge a,edge b){return a.w<b.w;
}
void krus(){sort(e+1,e+1+bs,cmp);for(int i=1;i<=bs;i++){int u,v;u=e[i].u;v=e[i].v;if(find(u)==find(v))continue;ans+=e[i].w;hb(u,v);if(++cnt==n-1)break;}
}
int main(){n=read(),m=read();for(int i=1;i<=n;i++){a[i]=i;}for(int i=1;i<=n;i++){pos[i].x=read();pos[i].y=read();}for(int i=1;i<=m;i++){int l1,l2;l1=read(),l2=read();dis[l1][l2]=1;dis[l2][l1]=1;}for(int i=1;i<=n;i++){for(int j=1;j<=n;j++){if(i==j)continue;e[bs].u=i;e[bs].v=j;e[bs].w=(double)sqrt((pos[i].x-pos[j].x)*(pos[i].x-pos[j].x)+(pos[i].y-pos[j].y)*(pos[i].y-pos[j].y));if(dis[i][j]==1){e[bs].w=0;}bs++;}}krus();printf("%.2f",ans);return 0;
}

4.P1991 无线通讯网

#include<bits/stdc++.h>
using namespace std;
int n,m,a[5005],cnt,bs=1,qq;
int dis[1005][1005];
double ans;
inline int read()
{int x=0,f=1;char c=getchar();while(c<'0'||c>'9'){if(c=='-') f=-1;c=getchar();}while(c>='0'&&c<='9') x=(x<<3)+(x<<1)+(c^48),c=getchar();return x*f;
}
struct edge{int u,v;double w;
}e[1000005];
struct node{double x,y;
}pos[1000005];
int find(int x){if(a[x]==x)return x;return a[x]=find(a[x]);
}
void hb(int y,int x){a[find(y)]=find(x);return;
}
bool cmp(edge a,edge b){return a.w<b.w;
}
void krus(){sort(e+1,e+1+bs,cmp);for(int i=1;i<=bs;i++){int u,v;u=e[i].u;v=e[i].v;if(find(u)==find(v))continue;ans=max(ans,e[i].w);hb(u,v);if(++cnt==n-m)break;}
}
int main(){m=read(),n=read();for(int i=1;i<=n;i++){a[i]=i;}for(int i=1;i<=n;i++){pos[i].x=read();pos[i].y=read();}for(int i=1;i<=n;i++){for(int j=1;j<=n;j++){if(i==j)continue;e[bs].u=i;e[bs].v=j;e[bs].w=(double)sqrt((pos[i].x-pos[j].x)*(pos[i].x-pos[j].x)+(pos[i].y-pos[j].y)*(pos[i].y-pos[j].y));bs++;}}krus();printf("%.2f",ans);return 0;
}

5.P1967 货车运输

这题就跟前面几个水题不一样了
先用kruskal求最大生成树并建新树,再魔改一下lca(保存儿子到父亲路径的最小权值)

#include<bits/stdc++.h>
using namespace std;
const int maxn=2e4+5,maxm=1e5+5;
int f[maxn];
int head[maxn],fa[maxn][22],cnt,dep[maxn],lg[maxm],w[maxn][22],head2[maxn];
int n,m,q;
struct edge{int u,v,w,nex;
}e[maxm],e2[maxm];
inline void add(int u,int v,int w){e[++cnt].v=v;e[cnt].u=u;e[cnt].w=w;e[cnt].nex=head[u];head[u]=cnt;
}
int cnt2;
inline void add2(int u,int v,int w){e2[++cnt2].v=v;e2[cnt2].u=u;e2[cnt2].w=w;e2[cnt2].nex=head2[u];head2[u]=cnt2;
}
int find(int x){if(x==f[x])return x;return f[x]=find(f[x]);
}
void hb(int x,int y){int fx=find(x);int fy=find(y);f[fx]=fy;
}
void dfs(int u,int fath){fa[u][0]=fath;dep[u]=dep[fath]+1;for(int i=1;i<=lg[dep[u]];i++){fa[u][i]=fa[fa[u][i-1]][i-1];w[u][i]=min(w[u][i-1],w[fa[u][i-1]][i-1]);}for(int i=head2[u];i;i=e2[i].nex){if(e2[i].v!=fath){w[e2[i].v][0]=e2[i].w;dfs(e2[i].v,u);}}
}
int lca(int x,int y){if(find(x)!=find(y))return -1;int ans=0x3f3f3f3f;if(dep[x]<dep[y])swap(x,y);while(dep[x]>dep[y]){ans=min(ans,w[x][lg[dep[x]-dep[y]]-1]);x=fa[x][lg[dep[x]-dep[y]]-1];}if(x==y)return ans;for(int k=lg[dep[x]]-1;k>=0;k--){if(fa[x][k]!=fa[y][k]){ans=min(ans,min(w[x][k],w[y][k]));x=fa[x][k];y=fa[y][k];}}return min(ans,min(w[x][0],w[y][0]));
}
bool cmp(edge x,edge y){return x.w>y.w;
}
void krus(){sort(e+1,e+1+m,cmp);int ans=0;for(int i=1;i<=m;i++){int u,v;u=e[i].u;v=e[i].v;if(find(u)==find(v))continue;hb(u,v);add2(u,v,e[i].w);add2(v,u,e[i].w);if(++ans==n)break;}
}
int main(){cin>>n>>m;int u,v,ww;for(int i=1;i<=n;i++){f[i]=i;}for(int i=1;i<=m;i++){scanf("%d%d%d",&u,&v,&ww);add(u,v,ww);}for(int i=1;i<=n;i++){//预先算出log_2(i)+1的值,用的时候直接调用就可以了lg[i]=lg[i-1]+(1<<lg[i-1]==i);}krus();dfs(1,0);cin>>q;for(int i=1;i<=q;i++){scanf("%d%d",&u,&v);printf("%d\n",lca(u,v));}return 0;
}

6.P4047 [JSOI2010]部落划分

#include<bits/stdc++.h>
using namespace std;
int n,m,a[5005],cnt,bs=1,qq;
int dis[1005][1005];
double ans;
double l,r;
vector<double>g;
inline int read()
{int x=0,f=1;char c=getchar();while(c<'0'||c>'9'){if(c=='-') f=-1;c=getchar();}while(c>='0'&&c<='9') x=(x<<3)+(x<<1)+(c^48),c=getchar();return x*f;
}
struct edge{int u,v;double w;
}e[1000005];
struct node{double x,y;
}pos[1000005];
int find(int x){if(a[x]==x)return x;return a[x]=find(a[x]);
}
void hb(int y,int x){a[find(y)]=find(x);return;
}
bool cmp1(edge a,edge b){return a.w<b.w;
}
bool cmp2(edge a,edge b){return a.w<b.w;
}
void krus(){sort(e+1,e+1+bs,cmp2);for(int i=1;i<=bs;i++){int u,v;u=e[i].u;v=e[i].v;if(find(u)==find(v))continue;hb(u,v);if(++cnt==n-m+1){ans=e[i].w;break;}}
}
int main(){n=read(),m=read();for(int i=1;i<=n;i++){a[i]=i;}for(int i=1;i<=n;i++){pos[i].x=read();pos[i].y=read();}for(int i=1;i<=n;i++){for(int j=1;j<=n;j++){if(i==j)continue;e[bs].u=i;e[bs].v=j;e[bs].w=(double)sqrt((pos[i].x-pos[j].x)*(pos[i].x-pos[j].x)+(pos[i].y-pos[j].y)*(pos[i].y-pos[j].y));bs++;}}sort(e+1,e+1+bs,cmp1);for(int i=1;i<=n-m;i++){dis[e[i].u][e[i].v]=0;e[i].w=0;}krus();printf("%.2f",ans);return 0;
}

7.P1113 杂务

小裸拓扑排序,之前学的时候拿这题写过题解,拓扑排序过程中记录更新最大时间即可

#include<bits/stdc++.h>
using namespace std;
vector<int>a[10005];
int t[10005];
int s[10005];
int n,m,c,k;
int ru[10005],chu[10005];
int main(){cin>>n;for(int i=1;i<=n;i++){int x,y,z;scanf("%d %d",&x,&t[i]);s[i]=t[i];while(1){cin>>z;a[x].push_back(z);ru[z]++;if(z==0)break;}}queue<int>q;for(int i=1;i<=n;i++){if(!ru[i]){q.push(i);}}while(!q.empty()){int v=q.front();q.pop();for(int i=0;i<a[v].size();i++){ru[a[v][i]]--;s[a[v][i]]=max(s[a[v][i]],s[v]+t[a[v][i]]);if(ru[a[v][i]]==0){q.push(a[v][i]);}}}for(int i=1;i<=n;i++){c=max(c,s[i]);}cout<<c;return 0;
}

8.P1983 车站分级

对于一趟车,起始中每一个不停的站点的等级都是低于路途中停下来的站点,记录下来,读入完毕之后进行拓扑排序,记录最大等级即可

#include<bits/stdc++.h>
using namespace std;
vector<int>a[1005],st[1005];
bool lian[1005][1005];
int ru[1005];
int n,m,c,ans,s;
int t[1005],den[1005];
int main(){cin>>n>>m;
//  memset(lian,false,sizeof(lian));for(int i=1;i<=m;i++){memset(t,0,sizeof(t));int x,y;scanf("%d",&x);for(int j=1;j<=x;j++){scanf("%d",&y);t[y]++;st[i].push_back(y);}for(int j=0;j<st[i].size();j++){for(int k=st[i][0];k<=st[i][x-1];k++){if(t[k]==0&&lian[k][st[i][j]]==false){a[k].push_back(st[i][j]);ru[st[i][j]]++;lian[k][st[i][j]]=true;}}}}queue<int>q;for(int i=1;i<=n;i++){if(ru[i]==0){q.push(i);den[i]=1;}}while(q.size()!=0){int now=q.front();q.pop();for(int i=0;i<a[now].size();i++){ru[a[now][i]]--;if(ru[a[now][i]]==0){q.push(a[now][i]);den[a[now][i]]=den[now]+1;}}}for(int i=1;i<=n;i++){ans=max(ans,den[i]);}cout<<ans;return 0;
}

9.P1038 神经网络

题意搁这逼逼赖赖,其实就是裸拓扑排序

#include<bits/stdc++.h>
using namespace std;
const int maxn=205,maxm=20005;
int n,p,c[maxn],head[maxn],cnt,vis[maxn],chu[maxn];
struct edge{int v,w,nex;
}e[maxm];
inline void add(int u,int v,int w){e[++cnt].v=v;e[cnt].w=w;e[cnt].nex=head[u];head[u]=cnt;
}
int main(){cin>>n>>p;int x,y;queue<int>q;for(int i=1;i<=n;i++){cin>>c[i]>>y;if(c[i]){q.push(i);vis[i]=1;}else{c[i]-=y;}}int u,v,w;for(int i=1;i<=p;i++){cin>>u>>v>>w;add(u,v,w);chu[u]=1;}while(!q.empty()){int u=q.front();q.pop();if(c[u]<=0)continue;for(int i=head[u];i;i=e[i].nex){int v=e[i].v;c[v]+=e[i].w*c[u];if(!vis[v]){q.push(v);vis[v]=1;}}}int f=0;for(int i=1;i<=n;i++){if(chu[i]==0&&c[i]>0){printf("%d %d\n",i,c[i]);f=1;}}if(f==0)puts("NULL");return 0;
}

10.P5960 【模板】差分约束算法

套公式,建源点

#include<bits/stdc++.h>
using namespace std;
const int maxm=10005;
struct edge{int v,w,nex;
}e[maxm];
int head[maxm],dis[maxm],inq[maxm],cnt,n,m,cs[maxm];
inline void add(int u,int v,int w){e[++cnt].v=v;e[cnt].w=w;e[cnt].nex=head[u];head[u]=cnt;
}
bool spfa(int s){queue<int>q;memset(dis,0x3f,sizeof dis);dis[s]=0;inq[s]=1;q.push(s);while(!q.empty()){int u=q.front();q.pop();inq[u]=0;for(int i=head[u];i;i=e[i].nex){int v=e[i].v;if(dis[v]>dis[u]+e[i].w){dis[v]=dis[u]+e[i].w;if(!inq[v]){q.push(v);cs[v]++;if(cs[v]==n)return true;}}}}return false;
}
int main(){cin>>n>>m;for(int i=1;i<=n;i++){add(0,i,0);}int u,v,w;for(int i=1;i<=m;i++){cin>>u>>v>>w;//不等式:  u-v<=w add(v,u,w);}if(spfa(0))puts("NO");else{for(int i=1;i<=n;i++){cout<<dis[i]<<" ";}}return 0;
}

11.P3275 [SCOI2011]糖果

对五种情况进行套公式即可

#include<bits/stdc++.h>
using namespace std;
#define int long long
const int maxm=4e5+5;
struct edge{int v,w,nex;
}e[maxm];
int head[maxm],dis[maxm],inq[maxm],cnt,n,m,cs[maxm];
inline void add(int u,int v,int w){e[++cnt].v=v;e[cnt].w=w;e[cnt].nex=head[u];head[u]=cnt;
}
bool spfa(int s){queue<int>q;memset(dis,-0x3f,sizeof dis);dis[s]=0;inq[s]=1;q.push(s);while(!q.empty()){int u=q.front();q.pop();inq[u]=0;for(int i=head[u];i;i=e[i].nex){int v=e[i].v;if(dis[v]<dis[u]+e[i].w){dis[v]=dis[u]+e[i].w;if(!inq[v]){q.push(v);cs[v]++;if(cs[v]==n)return true;}}}}return false;
}
signed main(){cin>>n>>m;for(int i=n;i>=1;i--){add(0,i,1);}int x,a,b;int fafa=0;for(int i=1;i<=m;i++){scanf("%lld%lld%lld",&x,&a,&b);if(x==1){add(b,a,0);add(a,b,0);}else if(x==2){add(a,b,1);}else if(x==4){add(b,a,1);}else if(x==3){add(b,a,0);}else if(x==5){add(a,b,0);}if(x%2==0&&a==b){fafa=1;}}if(fafa==1){puts("-1");return 0;}long long ans=0;int tt=-1e18+5;if(spfa(0)){puts("-1");return 0; } else{for(int i=1;i<=n;i++){ans+=dis[i];}}cout<<ans;return 0;
}

12.P2294 [HNOI2005]狡猾的商人

有环即为false,不要建源点

#include<bits/stdc++.h>
using namespace std;
const int maxm=4e5+5;
struct edge{int v,w,nex;
}e[maxm];
int head[maxm],dis[maxm],inq[maxm],cnt,n,m,cs[maxm];
inline void add(int u,int v,int w){e[++cnt].v=v;e[cnt].w=w;e[cnt].nex=head[u];head[u]=cnt;
}
bool spfa(int s){queue<int>q;memset(dis,0x3f,sizeof dis);memset(inq,0,sizeof(inq));memset(cs,0,sizeof(cs));dis[s]=0;inq[s]=1;q.push(s);while(!q.empty()){int u=q.front();q.pop();inq[u]=0;for(int i=head[u];i;i=e[i].nex){int v=e[i].v;if(dis[v]>dis[u]+e[i].w){dis[v]=dis[u]+e[i].w;if(!inq[v]){q.push(v);cs[v]++;if(cs[v]==n)return true;}}}}return false;
}
inline void init(){memset(head,0,sizeof head);cnt=0;
}
signed main(){int tt;cin>>tt;int s,t,w;while(tt--){cin>>n>>m;init();for(int i=1;i<=m;i++){cin>>s>>t>>w;add(s-1,t,w);add(t,s-1,-w);}if(!spfa(0))printf("true\n");else printf("false\n");}return 0;
}

13.P4926 [1007]倍杀测量者

咕咕咕

14.P5590 赛车游戏

咕咕咕

能力提升综合题单 Part 8.4 生成树Part 8.5 拓扑排序Part 8.6 差分约束相关推荐

  1. 洛谷 能力提升综合题单Part1 入门阶段 P1089 津津的储蓄计划 带注释

    题目描述 津津的零花钱一直都是自己管理.每个月的月初妈妈给津津300300元钱,津津会预算这个月的花销,并且总能做到实际花销和预算的相同. 为了让津津学习如何储蓄,妈妈提出,津津可以随时把整百的钱存在 ...

  2. 蔡丹红老师刁酒集团《基层管理人员综合能力提升培训班》企业内训开讲

    蔡丹红老师:刁酒集团<基层管理人员综合能力提升培训班>企业内训开讲 一线员工总是奋斗在前线,为公司打开销路.打开渠道,为公司创造业绩,作为基层管理人员应做好本职工作,努力提升自己,提高综合 ...

  3. 软件技术专业大学生该如何制定职业综合能力提升计划

    记得那还是五年级的时候,那时班主任叫我们写上自己的理想吧.我就记得自己写了成为一个对社会有用的人,而别的同学都写上科学家和老师等等.但随着不断的成长,我们都走上了自己特定的人生轨道.这个时候我们不能再 ...

  4. 《大数据实践课》开创实践教学新模式:清华大数据能力提升项目特色课程系列报道之一

    2014年4月,清华大学顺应时代潮流成为全国第一批成立大数据研究机构的高等学府.四年来,清华-青岛数据科学研究院(以下简称:数据院)与研究生院共同设计组织实施了以大数据能力提升项目为主的大数据人才培养 ...

  5. 计算机网络技术综合题大全

    第1章 计算机网络概述 一.简答题 1.简述计算机网络的发展过程. 答:从1946年世界上第一台计算机ENIAC的诞生到现在网络的全面普及,计算机网络的发展大体可以分为以下4个阶段: (1)第一代计算 ...

  6. 教师计算机培训重要性日志,2018教师信息技术应用能力提升专题培训研修日志...

    <2018教师信息技术应用能力提升专题培训研修日志>由会员分享,可在线阅读,更多相关<2018教师信息技术应用能力提升专题培训研修日志(3页珍藏版)>请在人人文库网上搜索. 1 ...

  7. 计算机教学能力提升体会,教师信息技术能力提升学习心得

    教师信息技术能力提升学习心得 发布时间:2019-09-17 导语:当今以计算机和网络技术为核心的现代技术正飞速的发展,改变我们的学习方式,信息的获取.分析.处理.应用的能力将作为现代人最基本的能力和 ...

  8. 继续教育研修计算机总结与反思,教师信息技术能力提升研修反思日志

    教师信息技术能力提升研修反思日志 随着信息技术的不断发展,多媒体教学.信息技术平台等成为活跃课堂.调动学生学习积极性的一种主要手段."国培计划"为提高教师的自身水平提供了良好的平台 ...

  9. 功能点方法论助力南京银行信息科技量化管理能力提升

    由南京银行股份有限公司供稿的"功能点方法论助力南京银行信息科技量化管理能力提升" 一文,被<金融电子化>采稿并于2019年8月刊(总287期刊)上发表,于2019年8月 ...

  10. 四川省中小学应用计算机技术,四川省中小学教师信息技术应用能力提升工程研修互动交流...

    相关热词搜索:互动 信息技术 研修 中小学教师 提升 四川信息技术提升工程 四川省中小学教师提升 四川教师信息技术能力 篇一:四川省中小学教师信息技术应用能力提升工程 四川省中小学教师信息技术应用能力 ...

最新文章

  1. Problem A: 平面上的点——Point类 (I)
  2. NYOJ 623 A*B ProblemII
  3. 后端技术:Nginx + Spring Boot 实现负载均衡
  4. java调用sqlserver存储过程_Java中调用SQLServer存储过程示例
  5. 在数据库中如何查询表的创建时间?
  6. HDU 5228 ZCC loves straight flush( BestCoder Round #41)
  7. Build tool
  8. dism 如备份服务器系统,还在用 Ghost?系统备份还原 DISM 超详细使用方法
  9. 远程桌面无法连接 计算机死机,远程桌面时,被控端出现死机现象
  10. linux合并ts文件吗,UNIX LINUX MACOS shell 下载合并*.ts视频
  11. java-map(世界杯)
  12. 英语3500词(十二)Easter主题(2022.1.24)
  13. Stopping service [Tomcat]和Disconnected from the target VM排查
  14. 深入浅出matplotlib(101):研究最有名的滤波函数:sinc函数
  15. 微信小程序调用weUI库
  16. 软件测试工资直追开发,是我的错觉吗?
  17. 医学统计学 第四章(定量资料的统计描述)
  18. 带负荷测试要求二次最小电流_带负荷测向量
  19. 不讲武德!为击破苹果的“隐私高墙”,谷歌、Facebook 竟然“二打一”?
  20. SPSS 共同方法偏差(图文+数据集)【SPSS 040期】

热门文章

  1. osm数据下载 python_用Python编写小工具下载OSM路网数据
  2. Java中异常处理示例
  3. Linux vip地址通信原理,IPv6的组播地址(掌握IPv6通信原理的关键知识点)
  4. python邮件群发_Python操作Gmail@定时定向群发邮件
  5. java 云 代码_我 - java代码库 - 云代码
  6. out.print 嵌套html代码_代码规范之前端编写码规范
  7. 确定进制(经典水题)
  8. java 原子类_没用过Java原子类?我来手写一个AtomicInteger
  9. hdu 5446 Lucas+中国剩余定理(孙子定理)+按位乘
  10. 在html种颜色的代码,html颜色代码生成器