萌新求助
查看原帖
萌新求助
120947
PurslaneM2GA楼主2023/1/22 16:25

RT , 在这道题中 , 如果使用优化建图的方法 , 需要建立虚点 . 但是我这么写 :

ffor(i,1,n) {
		map<int,vector<int>> mp;
		for(auto pr:val[i]) mp[pr.first].push_back(pr.second);
		for(auto it=mp.begin();it!=mp.end()&&it!=(--mp.end());++it) {
			vector<int> v1=it->second; auto It=++it; vector<int> v2=It->second;
			++idx;
			for(auto v:v1) G[idx].push_back(v),deg[v]++;
			for(auto v:v2) G[v].push_back(idx),deg[idx]++;
		}
	}

val 存的是每一行的所有非零的值 , 已经排过序 , 总会 Wa 很少的点 .

改成这样 :

ffor(i,1,n) {
		//map<int,vector<int>> mp;
		int lstid=0,lstv=0;
		for(auto pr:val[i]) {
			int v=pr.first,id=pr.second;	
			if(v!=lstv) {if(lstid) lstid=idx; else lstid=-1; ++idx,lstv=v;}
			G[idx].push_back(id),deg[id]++;
			if(lstid!=-1) G[id].push_back(lstid),deg[lstid]++;
		}
	}

却过了 . 二者唯一的区别大概是 , 每一行最大的几个点没有连上自己的虚点 , 但是这样应该不影响啊 , 因为数值最大的点对应的虚点在拓扑最开始就可以删掉了 . 难道是 STL 有什么魔幻的操作吗 ?

2023/1/22 16:25
加载中...