JOI2007予選 問題5@C++(-20)

予選当日はいちいち更新キューとか作ってやった気がする。馬鹿だったなあ自分。

#include <cstdio>
#include <algorithm>
#include <vector>

using namespace std;

struct item_pair {
	int battery;
	int motor;
	int cable;
	item_pair(int battery,int motor,int cable) : battery(battery),motor(motor),cable(cable) {}
};

int main(int argc,char* argv[])
{
	int batteries_count,motors_count,cables_count;
	scanf("%d %d %d\n",&batteries_count,&motors_count,&cables_count);
	vector<int> items(batteries_count+motors_count+cables_count,2);
	int n;
	scanf("%d\n",&n);
	vector<item_pair> results_0;
	for(int i=0;i<n;i++) {
		int battery,motor,cable,result;
		scanf("%d %d %d %d\n",&battery,&motor,&cable,&result);
		battery--;
		motor--;
		cable--;
		if(result==1) {
			items[battery]=items[motor]=items[cable]=1;
		} else {
			results_0.push_back(item_pair(battery,motor,cable));
		}
	}
	for(unsigned int i=0;i<results_0.size();i++) {
		const item_pair& c=results_0[i];
		int& bresult=items[c.battery];
		int& mresult=items[c.motor];
		int& cresult=items[c.cable];
		if(bresult==1 && mresult==1) {
			cresult=0;
		} else if(bresult==1 && cresult==1) {
			mresult=0;
		} else if(mresult==1 && cresult==1) {
			bresult=0;
		}
	}
	for(unsigned int i=0;i<items.size();i++) {
		printf("%d\n",items[i]);
	}
	return 0;
}