当前位置: 首页>>代码示例>>C++>>正文


C++ DisjointSet::init方法代码示例

本文整理汇总了C++中DisjointSet::init方法的典型用法代码示例。如果您正苦于以下问题:C++ DisjointSet::init方法的具体用法?C++ DisjointSet::init怎么用?C++ DisjointSet::init使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在DisjointSet的用法示例。


在下文中一共展示了DisjointSet::init方法的5个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。

示例1: solve

 void solve() {
   step = 0;
   memset(dfn, -1, sizeof(int)*n);
   for (int i=0; i<n; i++) {
     if (dfn[i] == -1) DFS(i, i, -1);
   }
   djs.init(n);
   for (int i=0; i<n; i++) {
     if (low[i] < dfn[i]) djs.uni(i, par[i]);
   }
 }
开发者ID:CoderINusE,项目名称:bcw_codebook,代码行数:11,代码来源:bcc_edge.cpp

示例2: main

int main() {
	scanf("%d", &T);
	for (int t = 1; t <= T; ++t) {
		scanf("%d %d", &n, &m);
		scanf("%lf %lf %lf %lf %lf %lf %lf %lf", &a.F, &a.S, &b.F, &b.S, &c.F, &c.S, &d.F, &d.S);
		init(t1, n, p1, a, b);
		init(t2, m, p2, c, d);
		e.clear();
		for (int i = 1; i < n; ++i) {
			e.PB(MP(dis2(p1[i - 1], p1[i]), MP(i - 1, i)));
		}
		for (int i = 1; i < m; ++i) {
			e.PB(MP(dis2(p2[i - 1], p2[i]), MP(n + i - 1, n + i)));
		}
		for (int i = 0; i < n; ++i) {
			int p = ts(i, 0, m - 1);
			e.PB(MP(dis2(p1[i], p2[p]), MP(i, n + p)));
			if (p - 1 >= 0) {
				e.PB(MP(dis2(p1[i], p2[p - 1]), MP(i, n + p - 1)));
			}
			if (p + 1 < m) {
				e.PB(MP(dis2(p1[i], p2[p + 1]), MP(i, n + p + 1)));
			}
		}
		std::sort(e.begin(), e.end());
		ds.init(n + m);
		double mst = 0;
		FOR(i, e)
		{
			int u = (*i).S.F, v = (*i).S.S;
			if (ds.setp(u, v)) {
				mst += sqrt((*i).F);
			}
		}
		printf("Case #%d: %.3lf\n", t, mst);
	}
开发者ID:xywy1992,项目名称:ACM-ICPC,代码行数:36,代码来源:Island+Explorer.cpp

示例3: main

int main(){

    DisjointSet graph;
    int t,a,b,n,k;
    char opc;

    scanf("%d",&t);

    for(int u=1;u<=t;u++){

        scanf("%d %d",&n,&k);

        graph.init(n);
        fill( pareja , pareja + n , -1 );

        for(int i=0;i<n;i++){
            scanf("%d",&a);
            if(a==0 || a-1==i) continue;
            a--;
            pareja[i] = a;
        }

        vector<pii> query;
        vector<pii> otro;

        while(k--){
            scanf("\n%c",&opc);

            if(opc=='C'){
                scanf("%d",&a);
                //printf("%c %d\n",opc,a);
                a--;
                b = pareja[a];
                if(b==-1) continue;
                pareja[a] = -1;
                query.push_back( pii( a , -1 ) );
                otro.push_back( pii( a , b ) );
            }
            else{
                scanf("%d %d",&a,&b);
                //printf("%c %d %d\n",opc,a,b);
                a--,b--;
                query.push_back( pii( a , b ) );
            }
        }

        for(int i=0;i<n;i++)
            if(pareja[i]!=-1)
                graph.join( i , pareja[i] );

        vector<string> res;
        int j = otro.size() - 1;

        for(int i=query.size()-1;i>=0;i--){
            if(query[i].second!=-1){
                if( graph.joined( query[i].second , query[i].first ) )
                    res.push_back("YES\n");
                else res.push_back("NO\n");
            }
            else{
                graph.join( otro[j].first , otro[j].second );
                j--;
            }
        }

        printf("Case #%d:\n",u);
        for(int i=res.size()-1;i>=0;i--)
            printf("%s",res[i].c_str());
    }
    return 0;
}
开发者ID:galloska,项目名称:Repositorio---Galloska,代码行数:71,代码来源:6910+-+Cutting+Tree.cpp

示例4: init

 void init(int _n) {
   n = _n; m = 0;
   for (int i=0; i<n; i++) E[i].clear();
   djs.init(n);
 }
开发者ID:CoderINusE,项目名称:bcw_codebook,代码行数:5,代码来源:bcc_edge.cpp

示例5: init

 void init(int n) {
   bcc.init(n);
   ds.init(n);
 }
开发者ID:Accoral,项目名称:AlgoLib,代码行数:4,代码来源:BridgeBlockTree.cpp


注:本文中的DisjointSet::init方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。