First off let me start by saying, please only ask one question at a time so we can best answer your question.
That being said, since no code is provided, I'm going to assume that the field being updated on the Parent object to re-run the rollup of the child objects, isn't a field that the child objects update. If it is, then you are going to run into issues with circular updating.
Otherwise this code would re-sum the child objects from the parent:
trigger MyTrigger on ParentObject__c (before update) {
ParentObject__c[] parentList = new ParentObject__c[]{};
for(ParentObject__c obj : Trigger.new) {
if(obj.MyField__c != Trigger.oldMap.get(obj.Id).MyField__c)
parentList.add(obj.Id);
}
Map<Id, Integer> childTotalMap = new Map<Id, Integer>();
for(ChildObject__c cobj : [SELECT Id, ParentObject__c, FieldToSum__c FROM ChildObject__c WHERE ParentObject__c IN :parentList]) {
if(!childTotalMap.containsKey(cobj.ParentObject__c)) {
childTotalMap.put(cobj.ParentObject__c, cobj.FieldToSum__c);
} else {
Integer currentTotal = chiltTotalMap.get(cobj.Id);
currentTotal += cobj.FieldToSum__c;
childTotalMap.put(cobj.ParentObject__c, cobj.FieldToSum__c);
}
}
for(ParentObject__c obj : Trigger.new) {
if(childTotalMap.containsKey(obj.Id))
obj.MyTotal__c = childTotalMap.get(obj.Id);
}
}
Keep in mind I haven't tested this code, but should work for you with the little description you have provided.
To answer your second question, please see this question already asked as it should provide the information you seek.